【发布时间】:2018-03-04 18:50:33
【问题描述】:
typedef struct structc_tag
{
char c;
double d;
int s;
} structc_t;
应用同样的分析,structc_t 需要 sizeof(char) + 7 byte padding + sizeof(double) + sizeof(int) = 1 + 7 + 8 + 4 = 20 bytes 但 sizeof(structc_t) 将是 24 bytes.I不明白对齐方式。任何人都可以帮助我吗?
【问题讨论】:
-
这个计算是正确的,除非你打包结构并且你在需要对齐访问的 64 位系统上
-
sizeof(char) + 7 字节填充 + sizeof(double) + sizeof(int) + 4 字节填充 = 24
-
@zappy 为什么在最后一个 int 之后多出 4 个字节?
-
@zappy 是不是因为 64 位和 32 位系统的内存需要在 4 字节边界上对齐?
-
大小需要为 24 以确保数组中的第二个元素正确对齐。