Förstå hur data lagras i minnet är viktigt för effektiv programmering i C och C + + +. Strukturer och fackföreningar är grundläggande datatyper som påverkar minneslayout och storlek. Denna artikel förklarar hur minnet fördelas för dessa datatyper och hur man beräknar deras storlekar korrekt.

Minne Layout av strukturer

Strukturer i C och C++ är samlingar av variabler, eventuellt av olika typer, grupperade tillsammans under ett enda namn. Kompilatorn tilldelar minne för en struktur genom att placera varje medlem sekventiellt, med eventuell padding för att uppfylla anpassningskraven.

Den totala storleken på en struktur är summan av dess medlemmars storlekar plus alla vadslagning som läggs till för anpassning. Padding säkerställer att varje medlem börjar på en adress som är delbart efter dess storlek eller anpassningskrav.

Minneslayout av unionen

Unioner liknar strukturer men skiljer sig åt i minnestilldelningen. Alla medlemmar i en union delar samma minnesutrymme, vilket motsvarar storleken på dess största medlem. Detta gör det möjligt för flera datatyper att ockupera samma minnesplats.

Storleken på en union bestäms av dess största medlem, plus eventuell paddling för inriktning. Att skriva till en medlem påverkar data från andra medlemmar, så fackföreningar används för minneseffektiv datadelning.

Beräkna datastorlekar

Beräkning av storleken på strukturer och fackföreningar innebär att man summerar storleken på enskilda medlemmar och överväger vaddering för anpassning. ]sizeof]]] operatör i C och C++ ger den totala storleken i byte.

Till exempel, överväga en struktur med en ] och en ]. Storleken på strukturen beror på storleken på ], storleken på ]]], och vadderingen tillsatt för justering. På samma sätt är storleken på en union storleken på dess största medlem.

  • Använd ] storlek för att bestämma total storlek.
  • Överväga anpassningskrav för varje medlem.
  • Konto för vaddering som lagts till av kompilatorn.
  • Kom ihåg att fackföreningar delar minnet bland alla medlemmar.