Robert Love - fejlesztés a linux kernel - 125. oldal
char fox; / * 1 byte * /
U8 __pad1; / * 1 byte * /
Megjegyezzük, hogy a kifejezés sizeof (foo_struct) érték egyenlő az 12 bármely példánya ez a struktúra a legtöbb 32 bites hardver platformokon. C fordító automatikusan hozzáadja a töltelék elemeket, amelyek biztosítják a szükséges beállítását.
Gyakran lehet átrendezni a szerkezet a területen annak érdekében, hogy ne kelljen kitölteni. Ez lehetővé teszi a megfelelő igazítva, hogy megkapja az adatokat anélkül, hogy további elemek, és töltse ki, illetve a szerkezet a kisebb méretű.
struct állat struct
előjel nélküli hosszú macska; / * 4 byte * /
unsigned short sertés; / * 2 byte * /
char kutya; / * 1 byte * /
char fox; / * 1 byte * /
Ez az adat struktúra a mérete 8 byte. Azonban nincs mindig lehetőség áthelyezése alkatrészek helyek szerkezete és szerkezetét meghatározó változásokat. Például, ha a szerkezet részeként történt a szabvány, vagy már használatban van a meglévő kódot, a mezők sorrendje nem változtatható. Néha, valamilyen oknál fogva, akkor szükség lehet egy speciális mezők sorrendje a szerkezet, mint például egy speciális beállítás változók, hogy optimalizálja a cache hit. Megjegyezzük, hogy megfelelően ANSI C szabvány, a fordító soha megváltoztatni a mezők sorrendjét szerkezetek [95] adatai - az említett törvény csak egy programozó.
Magfejlesztõk figyelembe kell venni sajátosságait kitöltésével adatcsere szerkezetek: átadását struktúrák hálózaton keresztül vagy közvetlenül a merevlemezre, mert az kell, hogy töltse ki más lehet a különböző hardver platformokon. Ez az egyik oka annak, hogy a C programozási nyelv nem összehasonlító operátor struktúrákat. Memória, amely feltölti a adatstruktúrák tartalmazhatnak véletlenszerű adatokat, ami lehetetlenné teszi byte byte összehasonlítása szerkezetek. A fejlesztők a nyelv, a C programozási helyesen, hogy nem engedélyezte a megoldást arra a problémára, összehasonlítás struktúrák belátása szerint a programozó, aki képes létrehozni az összehasonlítást funkciók minden esetben a szolgáltatások használatához az építési betonszerkezetek.
bájtsorrend
Végződést (bájtsorrend) - ez a sorrend, amelyben a byte található a gépi szó. A különböző CPU lehet használni kétféle byte számozás gép szót: legkevésbé fontos (least significant) bájt vagy a legelső (bal szélső, legbaloldalibb), vagy a legújabb (a legtöbb jobb, jobb szélső) a szót. A byte-sorrend az úgynevezett inverz (big-endian), ha a legjelentősebb (legjelentősebb) bájt van tárolva az első, majd a bájt a fontossági sorrendben. Az eljárás az úgynevezett közvetlen bájt (little-endian), ha a legkisebb szignifikáns (least significant) bájt van tárolva az első, majd a byte emelkedő fontossági sorrendben.
Ne próbálja meg hivatkozhat semmilyen feltételezések sorrendben a byte írásakor kernel kód (persze, ha a kód nem célja semmilyen konkrét hardver platform). A Linux operációs rendszer támogatja hardverplatformokat mindkét bájtsorrendjét, beleértve az olyan berendezést használó bájtsorrend lehet beállítani a rendszer indításakor, és az általános kód összeegyeztethetőnek kell lennie minden byte sorrendben.
Ábra. 19.1 ábra példát mutat egy fordított sorrendben a byte, és ábra. 19.2 - közvetlen byte sorrendben.
Ábra. 19.1. Fordított (big-endian) sorrendben byte

Ábra. 19.2. Közvetlen (little-endian) sorrendben byte
i386 használ direkt hardver platform (little-endian) sorrendben byte. A legtöbb más hardver platformok jellemzően az ellenirányú (big-endian) sorrendben.
Vegye figyelembe, hogy ezek a kódolási típusokat jelöli a gyakorlatban úgy néz ki, mint a bináris 1027 tárolja a négy bájtos egész adattípus.
00000000 00000000 00000100 00000011
A belső ábrázolása a számot memóriát a forward és reverz végződést eltérő, amint azt a táblázat. 19.3.
Táblázat 19.3. Hely az adatok memória különböző végződést