A sajt mérete
nem csak a sajttól, de a
lyukaktól is függ.
Egy szoftvert próbálunk már egy darab ideje 32 bites linux kernelről átírni 64 bitesre. Már túl voltunk az első egészen triviális szívásokon, mint pl a long/int, pointerek és egyebek hosszváltozása, de a rendszer csak nem akart összeállni. Egy idő után egy structra terelődött a gyanú, amit egy memcpy-val másoltunk át egy bitfolyamba és majd ott bitenként kezdtük elemezni. Míg 32 bitesek voltak az alkalmazások az átmásolt tartalom így nézett ki
struct akarmi {
int i; // 4 byte
long j; // 4 byte
}; /* sizeof (struct bar) = 8 bytes */
Elfeledkeztünk viszont arról, hogy mikor áttértünk 64 bitre nem csak a long hossza változott meg 64 bitre, hanem az alignment is. Ettől kezdve tehát így nézett ki a struktúra
struct akarmi {
int i; // 4 byte
// 4 byte padding
long j; // 8 byte
}; /* sizeof (struct bar) = 16 bytes */
Amikor átmásolás után bitenként próbáltuk a struktúra értékét értelmezni akkor jött a végzetes csapás, mert beleolvastunk a paddingbe a long értéke helyett.
Itt van egy remek kis cikk a Suntól, hogy mire érdemes figyelni a 32/64 bites áttéréskor és milyen segédeszközök vannak, emitt meg egy a Microsofttól. Érdemes elolvasni őket mielőtt fejjel menne az ember a falnak, mert vannak a listán kevésbé triviálisak is.