Slik fjerner Padding Fra en C Structure

Datamaskinens minne blir vanligvis justert til en grense som tilsvarer i størrelse til systemet ord størrelsen. På en hypotetisk 32-bit system, forestille seg at dette ordet størrelsen er fire byte. I C-språk, kan du lage strukturer som lagrer data. For å justere dem til ordet størrelse, kan den C-kompilator legge polstring til strukturen. Du kan fjerne denne padding ved hjelp av en preprosessor direktiv som forteller det til å justere data annerledes.

Bruksanvisning

1 Laste C IDE ved å klikke på programikonet. Når den åpnes, velger du "Fil / Ny / Project" og velg "C Project" for å opprette en ny C-prosjekt. En tom kildekoden filen vises i teksteditor del av IDE.

2 Lag en "struct" heter "A" med standard minne justering. Skriv følgende uttalelse på toppen av kildekoden filen:

struct {} A;

3 Legg noen data medlemmer til struct "A." Ved å blande heltall og tegntyper, er du sørge for at kompilatoren pads strukturen. På en 32-bit system, de to første int datatyper som hver tar opp fire byte minne og er perfekt justert som er. Men de to char datatypene som hver tar opp en enkelt byte, og sammen opptar to byte med data. Kompilatoren vil puten ut dette med to byte med søppel data for å justere dataene riktig. Legg til følgende utsagn for å konstruere "A" ved å plassere dem mellom klammeparenteser etter ordet "struct."

int a;

int b;

char a;

char b;

4 Lag en preprosessor direktiv som forteller det til rette for en byte grense, ikke 4-byte grense:

Pragma pakke (push, 1)

5 Lag en struct, denne heter "B", og plassere den umiddelbart etter preprosessor direktivet skrevet i forrige trinn.

struct {} B;

6 Fyll struct "B" opp med samme datatyper som struct "A", ved å skrive følgende utsagn i klammeparenteser av struct "B." Disse datatyper vil stille opp til nærmeste byte, som skjer for å være 10 (fire for hver int, en for hver char). Det vil ikke være noen polstring i denne strukturen.

int a;

int b;

char a;

char b;

7 Tilbake justeringen tilbake til standard ved å skrive følgende uttalelse:

Pragma pakke (pop)

Hint

  • Den sanne oppførsel av datastruktur justering er veldig hardware og C implementering bestemt. Eksemplet i denne artikkelen gjort under forutsetning av at dataene justert på fire byte grense og at C preprosessor tillatt dette endres gjennom direktiver. Dette er absolutt ikke tilfelle på alle maskiner med en C-kompilator. Før du justerer datastruktur justering, bør du forstå hvordan den underliggende maskinvaren fungerer og hva din konkrete gjennomføringen av C-kompilator gjør.