找到结构的大小

时间:2013-10-09 02:38:58

标签: c byte structure typedef sizeof

给定以下机器,以下结构的大小(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个字节。我想知道为什么?

1 个答案:

答案 0 :(得分: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字节边界上。 所以编译器的作用是使字段在这些边界上对齐 添加了未命名的空字段。