2016-10-08 2 views
1

Я пытался выяснить размер структуры, которая, как я думал, должна отображаться как 24 байта на моей 64-битной Mac OS, вместо этого она была показана как 32 байта. что мне не хватает?Размер структуры в 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

Прокладка; заполнение после 'a' (4 байта) и после' d' (еще 4 байта). Конечно, это повторяющийся вопрос. –

ответ

0

Выравнивание. 4 байта int, padding 4 байта, указатель на 8 байтов, указатель на восемь байтов, 4 байта float, 4 байта.

1

Любое поле выравнивается с минимальным выравниванием, которое равно 4 для целых чисел и поплавков и 8 для указателей. Перед таким выравниванием будет заполнение и память неиспользованными. Полная структура согласована с 16 из-за требований SSE:

a: offset 0 
b: offset 8 (4 bytes padding before) 
c: offset 16 
d: offset 24 
padding 4 bytes to align to 16 bytes. 
Смежные вопросы