Hogy lehet kiszámolni c-ben hogy pl egy struktúra mennyi helyet foglal?
" Viszont mivel a compilered paddingolt, ezért hozzáadott még 2 bájtot,"
Nem "paddingolt" semmiféle compiler, marharépa.
De létezik.
A noname bitfield az, ha nagyobb mint nulla. A struct-on belül.
Amire te utalsz, az nem padding, hanem gépi szóhatárra vagy integerre igazítás.
20-as már leírta.
struct{
int A:2;
int B:4;
int C:3
}
Az 'A' két, a 'B' négy, a 'C' három bites*. Ez összesen kilenc.
Egy byte az nyolc bit.
* Hiába integer a tipus, ez a három adattag csak nyúlfarknyi. Két, négy és három bit szélesek, legalábbis az általad megadott, kettőspont utáni értékek szerint.
Egy 32 bites számítógép a leggyorsabban 32 bites, azaz négy byte-os integerekkel képes műveleteket végezni. Ennél hosszabb vagy rövidebb adatokkal való operáció plusz gépidőbe telik.
Ezért az okos fordító a te 2,4,3 azaz összesen kilenc bitnyi adatcsoportodat mindjárt egy 32 bitesként kezeli. a 32 bit meg ugye négy byte. Ezért négy byte-os a struktúrád.
Ha unionról van szó, akkor az annyit jelent, hogy az unionba foglalt változók egy közös területen, egy azonos memóriacímen osztoznak. Ehhez persze az kell, hogy a rövidebb, tehát egy char tipusú is elférjen a területen és egy hosszabb, pl. integer is.
Ez meg csak úgy lehet, ha a foglalt terület int méretű.
Ezen a területen elfér a rövidebb is és a hosszabb is.
Mindig az másolódik oda, amelyik éppen kell.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!