2016-10-08 16 views
1

構造体のサイズを調べようとしましたが、これは64ビットMac OSでは24バイトになるはずですが、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バイトの整数、4バイトのパディング、8バイトのポインタ、8バイトのポインタ、4バイトの浮動、4バイトのパディング。

1

フィールドの最小値は、intとfloatの場合は4、ポインタの場合は8です。そのような位置合わせの前にパディングとメモリが使用されなくなります。完全構造は、SSE要件のために16に整列されます。

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