Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Forståelse av minneoppsett for structs | Forstå Structs og Minne
C-Strukturer

Forståelse av minneoppsett for structs

Sveip for å vise menyen

Minnestrukturer i programmeringsspråket C spiller en nøkkelrolle for å forstå hvordan data lagres og aksesseres i minnet. Når en struktur defineres i C, bestemmer kompilatoren hvordan medlemmene plasseres i minnet basert på justering og utfylling (padding).

Her er en oversikt over hvordan grunnleggende minneallokering 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 slik struktur oppta 5 byte: 1 byte for char x, 4 byte for int y, men dette vil være 8 byte.

Hvorfor er størrelsen på strukturen mye større enn forventet?

Dette skjer fordi kompilatoren kan sette inn utfylling mellom medlemmene for å sikre at hvert medlem starter på en adresse som er et multiplum av størrelsen sin.

minne+8+byte

På bildet kan du se at den første delen av minnet (lysere seksjon) tilhører variabelen char x, som kun opptar én byte. Etter dette er det tre tomme byte — dette er utfylling, automatisk lagt til av kompilatoren for å sikre at neste element starter på riktig adresse. Etter utfyllingen lagres variabelen int y, som opptar fire byte.

Som et resultat bruker strukturen totalt åtte byte: én for char, tre for justering, og fire for int.

Denne oppbygningen finnes for å hjelpe prosessoren med å få mer effektiv tilgang til data. Uten justering ville tilgang til strukturmedlemmer tatt lengre tid, og programmet ville kjørt saktere.

question mark

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

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 3. Kapittel 1
some-alt