0

sizeof(How_Many_Bytes)次のマシン パラメータが与えられた場合、次の構造のサイズ ( ) は?

sizeof(char) == 1; sizeof(int) == 4; sizeof(long) == 8; sizeof(char *) == 8; 

整数値は整列する必要があります。

typedef struct how_many_bytes { 
 long s; 
 char c, e; 
 int i; 
 char *d; 
} How_Many_Bytes; 

4+1+1+(2+4)+8 = 20 バイトになると思っていましたが、自分のマシンで実行すると 24 バイトになります。なぜだろう?

4

1 に答える 1

2

概念的には、次のようになります。

typedef struct how_many_bytes { 
 long s;          // 8   (NOT 4!)
 char c, e;       // 2
 char pad1, pad2; // 2 note these
 int i;           // 4 
 char *d;         // 8
} How_Many_Bytes; // 24 total

一部の型には位置合わせ要件があります。多くの場合、4 または 8 バイト境界にあります。したがって、コンパイラが行うことは、名前のない空のフィールドを追加することによって、フィールドをこれらの境界に揃えることです。

于 2013-10-09T02:41:27.357 に答える