给定以下机器,以下结构的大小(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个字节。我想知道为什么?
答案 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字节边界上。 所以编译器的作用是使字段在这些边界上对齐 添加了未命名的空字段。