Gå til innhold

g++ bruker dobbel strukturstørrelse


Anbefalte innlegg

I dette programmet reserverer g++ 24 byte på stakken ved start av funksjonen Grox():

struct SPerson {
   int age;
   int height;
   int width;
};

void Grox() {
   SPerson mrbean;
}

int main() {
   return 0;
}

 

I dette programmet reserverer g++ 0 byte ved start av Grox():

struct SPerson {
   int age;
   int height;
   int width;
};

void Grox() {

}

int main(int argc) {
   return 0;
}

 

Hvorfor i granskauen skjer dette? SPerson er jo bare 12 byte så det er jo høl i hue å reservere 24!

Lenke til kommentar
Videoannonse
Annonse

Jeg tipper det er fordi dataene blir alignet siden moderne prosessorer kan aksessere minnet raskere hvis minneaddressen er en multippel av 2 og størrelsen dens. Søk litt på "c struct alignment" eller noe, kan stille inn noen pragmaer eller attributter for å packe og aligne annerledes.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...