2016-10-08 9 views
1

Ich habe versucht, herauszufinden, die Größe einer Struktur, die ich als 24 Bytes auf meinem 64-Bit-Mac OS angezeigt werden sollte, stattdessen wurde es als 32 Bytes angezeigt. Was vermisse ich?Größe einer Struktur in C

#include<stdio.h> 

int main() { 

struct Test{ 
     int a; 
     int *b; 
     char *c; 
     float d; 
    }m; 
    int size = sizeof(m); 
    printf("%d\n",size); 

} 
+0

Polsterung; Padding nach 'a' (4 Bytes) und nach' d' (weitere 4 Bytes). Dies ist natürlich eine doppelte Frage. –

Antwort

0

Ausrichtung. 4 Bytes int, Padding 4 Bytes, 8 Bytes Zeiger, 8 Bytes Zeiger, 4 Bytes Float, 4 Bytes Padding.

1

Jedes Feld ist auf seine minimale Ausrichtung ausgerichtet, die 4 für Ints und Floats und 8 für Zeiger ist. Vor dieser Ausrichtung wird Padding und Speicher ungenutzt bleiben. Die vollständige Struktur ist aufgrund von SSE-Anforderungen auf 16 ausgerichtet:

a: offset 0 
b: offset 8 (4 bytes padding before) 
c: offset 16 
d: offset 24 
padding 4 bytes to align to 16 bytes.