Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Understanding Memory Layout of Structs | Forståelse af Structs og Hukommelse
C Structs

Understanding Memory Layout of Structs

Stryg for at vise menuen

Hukommelsesstrukturer i programmeringssproget C spiller en central rolle i forståelsen af, hvordan data lagres og tilgås i hukommelsen. Når en struktur defineres i C, bestemmer compileren, hvordan dens medlemmer placeres i hukommelsen baseret på justering og udfyldning regler.

Her er et overblik over, hvordan grundlæggende hukommelsestildeling for strukturer fungerer i C:

main.c

main.c

123456789101112131415
#include <stdio.h> // simple struct struct Test { char x; // 1 byte int y; // 4 bytes }; int main() { struct Test example; printf("Size of struct Test: %zu\n", sizeof(example)); printf("Address of example.x (char): %p\n", &example.x); printf("Address of example.y (int): %p\n", &example.y); return 0; }

Som forventet burde en sådan struktur optage 5 bytes: 1 byte til char x, 4 bytes til int y, men dette vil være 8 bytes.

Hvorfor er størrelsen på strukturen meget større end forventet?

Dette sker, fordi compileren kan indsætte udfyldning (padding) mellem medlemmerne for at sikre, at hvert medlem starter på en adresse, der er et multiplum af dets størrelse.

memory+8+bytes

På billedet kan du se, at den første del af hukommelsen (den lyse sektion) tilhører variablen char x, som kun optager én byte. Herefter er der tre tomme bytes — dette er udfyldning (padding), automatisk tilføjet af compileren for at sikre, at det næste element starter på den korrekte adresse. Efter udfyldningen gemmes variablen int y, som optager fire bytes.

Som resultat optager strukturen i alt otte bytes: én til char, tre til justering og fire til int.

Denne opbygning findes for at hjælpe processoren med at få mere effektiv adgang til data. Uden justering ville adgang til strukturens medlemmer tage længere tid, og programmet ville køre langsommere.

question mark

Hvorfor returnerer sizeof(struct Test) 8 i stedet for 5?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 1
some-alt