Emancipate Skrevet 2. juli 2007 Del Skrevet 2. juli 2007 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
teflonpanne Skrevet 2. juli 2007 Del Skrevet 2. juli 2007 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
Emancipate Skrevet 2. juli 2007 Forfatter Del Skrevet 2. juli 2007 (endret) sizeof(SPerson) gir 12, så det har ikke noe med det og gjøre. Edit: void Grox() { SPerson mrbean, mrladen; } Tror du dette gir 24+24 = 48 eller 24+12 = 46? Nei da, g++ reserverer 40 byte! Endret 2. juli 2007 av tsg1zzn Lenke til kommentar
teflonpanne Skrevet 2. juli 2007 Del Skrevet 2. juli 2007 Vel, jeg er rimelig sikker på at det er pga alignment, kan ikke se hvorfor den skulle gjøre det ellers. Som sagt, søk litt og se hvordan gcc aligner, så gir det nok mening. Lenke til kommentar
GeirGrusom Skrevet 3. juli 2007 Del Skrevet 3. juli 2007 (endret) Men på moderne prosessorer er den vel mest interresert i tall som kan deles med 4, og ikke 2? edit: du kan jo disasemble programmet, og se hva som foregår. Endret 3. juli 2007 av GeirGrusom Lenke til kommentar
Emancipate Skrevet 3. juli 2007 Forfatter Del Skrevet 3. juli 2007 Jeg trenger ikke disassemble så lenge jeg ikke assembler... (Bruk -S.) Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå