.[ ČeskéHry.cz ].
velkost booleanu?
Jdi na stránku Předchozí  1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 15. prosinec 2007, 16:12:41    Předmět: Odpovědět s citátem

Yossarian napsal:
Pavel> no, zarovnani do 4b se da vypnout, minimalne v ms kompilatoru pomoci
#pragma pack (1)


da sa to aj inde. len by ma zaujimalo preco to zarovnanie existuje. je vdaka tomu nejaky vykon naviac alebo co?
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MePHyst0



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: SVK/CZK

PříspěvekZaslal: 15. prosinec 2007, 16:26:22    Předmět: Odpovědět s citátem

je to preto aby boli struktury cache friendly(samozrejme ak sa potom s nimi tak aj nepracuje tak to nema vyznam Smile ) a pekne adresovatelne
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 15. prosinec 2007, 17:36:14    Předmět: Odpovědět s citátem

Tuším, že 32bitový procesor je radši, když dostává pěkně 32bitové hodnoty, případně adresy zarovnané na 32 bitů. Podobně to bude asi platit i pro 64bitové procesory.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 15. prosinec 2007, 17:48:24    Předmět: Odpovědět s citátem

Quiark napsal:
Tuším, že 32bitový procesor je radši, když dostává pěkně 32bitové hodnoty, případně adresy zarovnané na 32 bitů. Podobně to bude asi platit i pro 64bitové procesory.


nejenomze je radsi, ale v pripade ze to nezarovnas to pri vypoctech stejne zarovna aby mu to vyslo do registru

proto ikdyz potrebuju pracovat s nezarovnanymi daty, automaticky si rucne tu strukturu zarovnam na potrebny pocet bitu, aby to bylo delitelne 32bity.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
johnnash



Založen: 30. 07. 2007
Příspěvky: 80

PříspěvekZaslal: 15. prosinec 2007, 18:09:10    Předmět: Odpovědět s citátem

Spis jde o to ze pocitaci ktery ma 32-bitovou adresovou sbernici v pripade ze data nelezi na nasobku 4 bajtu a cteme treba int tak je nutne provest dvakrat operaci cteni.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 15. prosinec 2007, 19:23:54    Předmět: Odpovědět s citátem

Quiark napsal:
Tuším, že 32bitový procesor je radši, když dostává pěkně 32bitové hodnoty, případně adresy zarovnané na 32 bitů. Podobně to bude asi platit i pro 64bitové procesory.

Na 64bitech jsou jeste daleko prisnejsi podminky. Fakt dlouhy clanek o zarovnavani je zde: http://msdn2.microsoft.com/en-us/library/aa290049.aspx
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
opice



Založen: 29. 07. 2007
Příspěvky: 39

PříspěvekZaslal: 16. prosinec 2007, 00:05:27    Předmět: Odpovědět s citátem

K prvnimu dotazu: velikost int neni nedefinovana, jak tu nekdo tvrdil, ale je to vzdy velikost adresace procesoru....
a dale velikost maleho bool je implementacne zavisla, neni definovana ve standardu, pekne pojednani o malem bool a velkem BOOL je zde:

http://www.codeguru.com/forum/showthread.php?t=332831
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 16. prosinec 2007, 00:21:46    Předmět: Odpovědět s citátem

opice napsal:
K prvnimu dotazu: velikost int neni nedefinovana, jak tu nekdo tvrdil, ale je to vzdy velikost adresace procesoru....

To se říkalo v dobách přechodu z 16bit na 32bit systém. Velikost adresace procesoru (systému) je size_t, tzn. sizeof(void*) == sizeof(size_t). int je 32bit integer na všech procesorech 32bit, 64bit a dokonce i na itanium 64bit, na G++ i VC++. C++ norma specifikuje o velikostech typů pouze to, co tu říkal rezna, nic víc (že jeden musí být <= jak druhý).
Při přechodu na 64bit systém se změní akorát sizeof(long) na 8.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
opice



Založen: 29. 07. 2007
Příspěvky: 39

PříspěvekZaslal: 16. prosinec 2007, 00:33:57    Předmět: Odpovědět s citátem

Hmm, tak to nevim. Ale VC++ 2008 ted meni uz velikost int pro 64 bitovy kod na 64 bitu, takze u MS to tak bude. Jinak samozrejme standard o velikosti int nic nerika.

Eosie napsal:
opice napsal:
K prvnimu dotazu: velikost int neni nedefinovana, jak tu nekdo tvrdil, ale je to vzdy velikost adresace procesoru....

To se říkalo v dobách přechodu z 16bit na 32bit systém. Velikost adresace procesoru (systému) je size_t, tzn. sizeof(void*) == sizeof(size_t). int je 32bit integer na všech procesorech 32bit, 64bit a dokonce i na itanium 64bit, na G++ i VC++. C++ norma specifikuje o velikostech typů pouze to, co tu říkal rezna, nic víc (že jeden musí být <= jak druhý).
Při přechodu na 64bit systém se změní akorát sizeof(long) na 8.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 16. prosinec 2007, 17:37:55    Předmět: Odpovědět s citátem

opice napsal:
Hmm, tak to nevim. Ale VC++ 2008 ted meni uz velikost int pro 64 bitovy kod na 64 bitu, takze u MS to tak bude. Jinak samozrejme standard o velikosti int nic nerika.

Nikde jsem na netu nenašel, že se to bude měnit. Ono by se to ani měnit nemělo, protože by jim nezbyl žádný datový typ, který by reprezentoval 32bit integer.
EDIT: Pokud to tak nastavili, tak je to proti C++ normě.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
tempicek



Založen: 04. 12. 2007
Příspěvky: 62

PříspěvekZaslal: 17. prosinec 2007, 00:00:35    Předmět: Odpovědět s citátem

Mno, nechtel jsem se do toho vkladat, kdyz se tu reklo tolik faktu (ktere uz jsou celkem daleko od puvodniho dotazu Smile ), ale taky se tu reklo par polopravd a par blbosti, tak je asi na case to trochu zrekapitulovat Smile

Podle standardu si muzete byt jisti tim, ze sizeof( char ) == 1 a ze sizeof(short int) <= sizeof(int) <= sizeof(long int). A to je z tehle kapitoly skoro vsechno Smile Takze rozhodne nespolehat na to, ze bool je 1, 8 nebo 32 bitu. A to neplati pouze pro bool, ale pro typy obecne. Hlavne se probuh vyhnete ukladani pointeru do intu a podobnym unix-era zhuverilostem.

Obdobna vystraha plati pro velikosti struktur. struct S { char a; } totiz s nejvetsi pravdepodobnosti *nebude* mit velikost 1 byte! Jak uz bylo receno, aplikuje se na struktury zarovnani zpravidla na 4 byty, ale ani na to se nada sazet! Kdyz si to jooo extra chcete pojistit (treba nacitani struktury ze souboru), tak "#pragma pack" se da pouzit na definovani velikosti zarovnani.
Zarovnava se z mnoha duvodu, jednim z hlavnich je redukce poctu "cache-miss". Pamet (operacni i vyrovnavaci) je totiz take zarovnavana a data nejsou zpravidla ctena po bytech (konkretni velikost je dana architekturou - predevsim velikosti sbernice), ale po vetsich celcich. Tyhle celky byvaji obvykle mocniny dvou, takze je dobre na ne provadet zarovnani polozek v pameti, aby polozky nelezely na rozhrani vice bloku, nez je nezbytne nutne (pokud je blok 4 byty velky, potrebujete na 4bytovou promennou pouze jeden blok, spatnym umistenim muzete vsak zasahnout dva). S tim souvisi i nasobne cteni z pameti (jakekoli! i cache) - spatne umistena data musite nacitat vice instrukcemi. Ale souvisi to samozrejme i s velikostmi registru a jinymi vecmi, ale je tezke zavdecit se kazdemu aspektu architektury ... napriklad registru je v kazde architekture vice a zpravidla i ruznych velikosti, proto se pro ruzne velikosti data pouziji i ruzne instrukce, potazmo ruzne registry ... tim bych se tedy az tak nezabyval, pokud nekodite primo v asm na perfektne definovanou architekturu.

Nevim o tom, ze by se ve VC2008 zmenil int na 64bitu pro 64bitovy compiler; nevylucuji to, ale rozhodne by to neznamenalo absenci 32bitoveho typu - jak uz bylo receno - neni to definovano normou jazyka, takze si to zadefinuje vyrobce kompilatoru.
Rozhodne neplati, ze by byla velikost intu dana velikosti adresace. Takze opet - zadne prasarnicky s pointery!

Zarovnavat rucne - je dobry napad v pripade enumu nebo struktur, kde potrebujete presne vedet co tam kde najdete (opet priklad s nacitanim struktur ze souboru). Obecne bych pred tim opet varoval, nechte to na kompilatoru! Ti kluci vetsinou velmi dobre vedi co delaji a prelozi kod inteligentne pro danou platformu.

Setreni pameti v podobe zhustovani "flagu" do jedne promenne - ok, proc ne, ale s mirou. Pokud jsou to skutecne flagy typu "file attribut" a podobne, ma to svuj smysl. Obecne je ta pamet dnesk vazne levna a nejake skladani promennych dohromady musi mit vetsi opodstatneni nez setreni pameti (napr. rychlost prenosu). Kolik takovych promennych v programu mate? 10 000? Tzn. 40 kB i pri pouziti 32bitove promenne na jednu? Co to je? (Nerikam plytvat, plytvat, plytvat, ale setrit tam, kde to ma smysl - hlavne se vyhnout chybam).

Mno, jeste par veci jsem chtel napsat, ale leniveji mi prsty. Takze jen shrnu - jestli v techhle vecech nemate 100% jasno, vyhnete se jim obloukem a usetrite si cas pri ladeni Smile Pro pokrocile ta varovani samozrejme neplati, tam je namiste spis varovani, aby neprecenovali sve schopnosti Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
xtopi



Založen: 11. 08. 2007
Příspěvky: 24
Bydliště: La republica Checa

PříspěvekZaslal: 27. prosinec 2007, 15:29:13    Předmět: Odpovědět s citátem

Já mám C++ tak rád, ale přesně tohle se mi na něm nelíbí - kolik komentářů a textu se napsalo na jeden triviální dotaz.... Shocked
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
niXon



Založen: 27. 10. 2007
Příspěvky: 22

PříspěvekZaslal: 10. květen 2008, 19:37:32    Předmět: Odpovědět s citátem

no samozrejme ze to v podstate nema vyznam, ale vezmite si, ze by ste mali kvantum (ked hovorim kvantum tak obrovske kvantum) hodnot na 1/0, a mate ich poslat cez sietove spojenie? tak tam uz nejde o vykon PC, ale o traffic... tam sa taketo "haluze" zidu ... ked si zoberiete ze z "tradicneho" (vecsinoveho) 32 bitoveho intu urobite 32 hodnot, tak mate 32x znizenie prenosu cez net... to je myslim si ze dost postacujuci dovod aby som sa takymito vecami zaoberal (a nielen ja)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ash



Založen: 30. 07. 2007
Příspěvky: 13
Bydliště: Bratislava

PříspěvekZaslal: 10. květen 2008, 20:31:36    Předmět: Odpovědět s citátem

niXon,

Šablóna triedy std::vector<> má špecializáciu std::vector<bool>, ktorá vcelku elegantne rieši problémy s poľom boolovských premenných.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 10. květen 2008, 22:37:03    Předmět: Odpovědět s citátem

niXon> to sice mas pravdu, na druhou stranu delat sitovou komunikaci primym kopirovanim z pameti je jeden z nejlepsich zpusobu jak si zajistit spoustu krasnych problemu. Takze resit, jaka je velikost booleanu v pameti, kvuli ukladani nebo sitim zas tak velky smysl nema Wink
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3  Další
Strana 2 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna