Náhrada za sizeof – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Náhrada za sizeof – C / C++ – Fórum – Programujte.comNáhrada za sizeof – C / C++ – Fórum – Programujte.com

 

yaqwsx+9
Posthunter
8. 9. 2007   #1
-
0
-

Potreboval bych zjistit kolik struktura prave zabira pameti.Chci mit totiz presny prehled o jejich velikosti,jenze sizeof to nedokaze.Nevite jak napsat takovou f-ci,neb jestli nejaka takova existuje?
Dekuji za odpoved

Nahlásit jako SPAM
IP: ...–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
yaqwsx2
~ Anonymní uživatel
6 příspěvků
8. 9. 2007   #2
-
0
-

No sizeof akorat zada velikost pri prekladu,pruzne se nemeni(napr u vectoru nebo u allocator).Myslim napr mam string .Prazdny ma velikost 32bytu,jenze i kdyz do nej neco ulozim,sizeof vrati 32.

Omlouvam se ze pisu neprihlaseny,ale nejak se mi nejde prihlasit

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
8. 9. 2007   #3
-
0
-

Teraz nevim ci myslis string ako c-ckovsky alebo sablonu z C++, ale asi sablonu kedze 32 byte-ov...
Ono ide o to, ze vnutorne je string (ako trieda) vnutrne vyrobena tiez "len" z obycajneho C-ckovskeho retazca a c-ckovsky retazec ja vlastne char * a ten ma _vzdy_ rovnaku velkost (32 (64) bitov na 32 (64) bitovyich procesoroch)... A ten retazec je ulozeny niekde uplne inde v pamati ako instancia tej triedy...

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
9. 9. 2007   #4
-
0
-

To yaqwsx 2:
Takto zjišťovat velikost STL kontejneru je docela zrážející. STL konetejnery nabízí určité metody, kterými lze velikost(resp. počet položek) dat, které obsahují zjistit. Takže nezbýva než nahlednout do dokumentace a trochu si ji prostudovat.

Nahlásit jako SPAM
IP: ...–
yaqwsx2
~ Anonymní uživatel
6 příspěvků
9. 9. 2007   #5
-
0
-

Ehm,no ja nemyslim pocet polozek,to jsme si nerozumeli.JA bych chtel mit udaj kolik ta struktura zabira bytu vcetne prave v ni ulozenych dat + jejich pomocnych dat.

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
9. 9. 2007   #6
-
0
-

Tak to mas pomerne jedoducehe.... sizeof(string) + string.metoda_vracajuca_velkost()
(Neviem si spomenut ako sa vola ta metoda ... ;)

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
9. 9. 2007   #7
-
0
-

To yaqwsx2:

No, je to tak, jak pise k, jen je jeste vhodne tu veliost vynasobit velikosti typu polozek toho kontejneru. Ale i přesto to v některých případech nemusí dávat to, co chceš.

Nahlásit jako SPAM
IP: ...–
yaqwsx2
~ Anonymní uživatel
6 příspěvků
9. 9. 2007   #8
-
0
-

To Jura:
NO mas pravdu,prave o to mi jde.PRoto bych chtel nejakou f-ci,ktera to dokaze spocitat.Napadlo me nastavit ukazatel na 1. a na posledni byte a pak to spocitat,jenze nevim jak je nastavit

To k: jmenuje size();

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
9. 9. 2007   #9
-
0
-

No,zkus být trochu konkrétnější -uveď příklad. A kdyžtak napiš čeho chceš docílit, třba to půjde udělat jinak.

Nahlásit jako SPAM
IP: ...–
yaqwsx2
~ Anonymní uživatel
6 příspěvků
9. 9. 2007   #10
-
0
-

TAk, skousim udelat takovy jednoduchy databazovy program,a on pracuje s polozkami,ktere uchovavam v primitivnim datovem poli,vytvorenem pres tidu allocate.To by se zjistenim velikosti nebyl problem,kdyby nebyly nektere polozky dynymicky rostouci,nebo nebyly ruzneho typu(pro pole se tvri stejne,ale pracuji s nimi jinak).Tadle hiearchie mi pak za predpokladu,ze muzu znat presnou delku jednotlivych polozek,umoznuje snadne ukladani a nacitani do/ze souboru.

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
9. 9. 2007   #11
-
0
-

Mno, vzhledem k tomu, co se snažíš udělat, tak bych asi postupoval trochu jinak(memory mapped files). Teď budu trochu hádat. Pokud ten kontejner ukládáš jako celek,tak to raději nedělej. Vždy ukládaj jednotlivé položky postupně. Ale pokud jde jen o ukladání, tak jak jsem tu kdysi psal, struktury nemá moc smysl načítat/ukladát jako celky, ale po položkách - je to kvůli zarovnání(velikost struktury obvykle bývá větší než je skutečná). Samozřejmě záleží na účelu, někdy je asi vhodnější ukládat jako celek, kvůli rychlosti, ale jak jsem psal, záleží na účelu. Jinak koukni se na serializaci a deserializaci(ukladání a náčítaní). Obvykle se hodí udělat si nějaký interface, který budou implementovat všechny objekty(bude obsahovat jen 2 metody serialize a deserialize) a dále nějakou třídu, která se bude starat o ukládání(další pro načítání). Jinak opět uvedu svůj oblíbený zdroj:
http://relisoft.com/book/tech/7serial.html :) To podstatné je úplně dole.Samozřejmě, aby to bylo úplně ok, tak by to chtělo ještě něco, co bude řešit endianitu.

Nahlásit jako SPAM
IP: ...–
k
~ Anonymní uživatel
144 příspěvků
9. 9. 2007   #12
-
0
-

Nemal by si to jednoduchsie keby urobis pole (alebo hoicio ine) z niecoho ako
struct _data {
int len;
char * data;
}
?
+poprpade nejake ine polozky a "int len" by bola dlzka zanamu a data by si uz interpretoval ako len chces...
Navyse sa takto nemusis srat o to, ze kolko ma v skutocnosti ta struktura koli zarovnavaniam a tak, lebo zpisujes <len> byte-ov z data ...

Ale ak som ta zle pochopil tak ma ignoruj ;)

Nahlásit jako SPAM
IP: ...–
yaqwsx2
~ Anonymní uživatel
6 příspěvků
9. 9. 2007   #13
-
0
-

To Jura:NO,to tema jsem si cetl,bohuzel jsem strukturu navrhoval tak aby,se dala ukladat v celku....A az pak jse si uvedomil,ze neznam nic na zjisteni velikosti...Jeste skusim popremyslet po nejakem jinem zpsobu,a mozna predelam i tu strukturu...
Diky za odpovedi a snahu

Nahlásit jako SPAM
IP: ...–
sn3d
~ Anonymní uživatel
564 příspěvků
10. 9. 2007   #14
-
0
-

to yaqwsx2: este ak mozem poradit. Ked robis taketo veci kedy pracujes z datami a niekde ich zapisujes (ci uz vlastny format, alebo protokol) pouzivaj fakt len najnutnejsie najelementarnejsie typy ala char, int. Ak mozes nepouzivaj ziadne instancie na triedy, popripade ako Jura pisal, implementuj si nejaky mechanizmus serializacie.

Dalsia rada do zivota ;) Uz x-programatorov riesilo tieto problemy. Da sa povedat ze manipulacia z datami a strukturami je gro celeho humbuku z nazvom informatika.Preto uz v 80 rokoch vzniklo nieco co malo umoznit lebsiu pracu zo strukturami. Nazyva sa to ASN.1. Ide skor o abstraktnu vec ale doporucujem nastudovat. ASN.1 funguje uz x-rokov v pozadi a vela sa o tom nepise ale je na tom postavene mnozstvo systemov, protokolov. Clovek sa z nim stretne snad v kazdom odvetvy, na kazdom rohu, ci uz telekomunikacie, siete, bankovy sektor. V ASN.1 som vydel implementovany LDAP, SNMP a mnozstvo inych. Dokonca suborove formaty ako Wav ci Avi. Doporucoval by som ti teda sa pozriet na ASN.1 a jeho konkretne kodovania BER, CER, DER a hlaavne princip TLV. Tym sa mozes inspirovat a tvoj navrh bude podstatne rozumnejsi. Dokonca ked ziskas skusenosti z asn1c tak ti usetry aj mnozstvo kodovania.

http://www.root.cz/clanky/analogie-asn1/
http://lionet.info/asn1c/

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 99 hostů

Podobná vlákna

Sizeof — založil sexmachina

Sizeof — založil Avidius

Sizeof — založil p4f

Sizeof bool — založil Porcepoque

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý