Forstå hvordan data lagres i minnet er viktig for effektiv programmering i C og C++. Strukturer og fagforeninger er grunnleggende datatyper som påvirker minnelayout og størrelse. Denne artikkelen forklarer hvordan minne tildeles for disse datatypene og hvordan de beregner størrelsene nøyaktig.

Minneutforming av strukturer

Strukturer i C og C++ er samlinger av variabler, muligens av forskjellige typer, gruppert sammen under et enkelt navn. Kompilatoren tildeler minne for en struktur ved å plassere hvert element sekvensielt, med mulig polstring for å oppfylle justeringskravene.

Den totale størrelsen på en struktur er summen av elementenes størrelser pluss hvilken som helst polstring som er lagt til for justering. Fylling sikrer at hvert element starter på en adresse som er fordelt på sin størrelse eller justeringskrav.

Minneutforming av unioner

Unioner er lik strukturer, men forskjellig i minnetildeling. Alle medlemmer av en union deler samme minneplass, som er lik størrelsen på det største medlemmet. Dette gjør det mulig å okkupere flere datatyper samme minneplassering.

Størrelsen på en union bestemmes av dets største element, pluss mulig polstring for justering. Skriving til ett medlem påvirker dataene til andre medlemmer, så fagforeninger brukes til minneeffektiv datadeling.

Beregne datastørrelser

Beregne størrelsen på strukturer og fagforeninger innebærer å summere størrelsen på individuelle medlemmer og vurdere polstring for justering. størrelse operatør i C og C++ gir den totale størrelsen på bytene.

For eksempel, vurdere en struktur med en og en . Størrelsen på strukturen avhenger av størrelsen på , størrelsen på og polstringen som er lagt til for justering. På samme måte er størrelsen på en union størrelsen på dens største medlem.

  • Bruk størrelse til å bestemme total størrelse.
  • Tenk på tilpasningskravene til hvert medlem.
  • Konto for polstring som er lagt til av kompilatoren.
  • Husk at fagforeninger deler minne blant alle medlemmer.