Dobrý den,
chtěl bych se zeptat: proč má typ bool velikost 1 bajt, když logicky by měl mít velikost 1 bit?
dík
Dobrý den,
chtěl bych se zeptat: proč má typ bool velikost 1 bajt, když logicky by měl mít velikost 1 bit?
dík
Protože pak by sizeof(bool) muselo vracet 0,125 - což moc neodpovídá typu size_t. Jestliže vrací počet bajtů, které jsou potřeba na uložení v paměti, tak je jasné, že do 0 bajtů se ten bool nevejde, takže nejmenší použitelné množství je 1.
Nejmensi mozna jednotka po ktere se da adresovat je jeden Byte (8bitu) vse ostatni se musi delat extra.. pokud chces vyuzit jednotlive bity v bajtu, neni problem, s tim se da pracovat.
Mimochodem jeste taky zalezi na prekladaci jak si zoptimalizuje data ... muze klidne zarovnat bool na celejch 8B na 64b procesoru....
napriklad struktura:
struct x { bool a,b,c; } ma velikost 3Bajty
struct x { bool a,b,c; uint64_t d; } ma ale uz 16Bajtu -> abc sou za sebou ale 64b data se lepe nacitaji kdyz sou na spravne pozici, takze se jen doplni 5bajtu prazdna... a d zabere 8bajtu tak jak tak.. kdyz se pak prida jeste jedna 8bitova promenna je hned zabrano 24B....
Tak tak, pokud bys chtěl být super-truper optimalizátor, tak si uděláš proměnnou typu char (jednobytovou) a máš 8 jednobitových proměnných, těm se většinou říká flagy a pracuje se pomocí logických operací AND, XOR.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku