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 回答