嗨我明白C标准在执行sizeof时需要内存对齐。但我不太明白为什么甚至整数数组都需要对齐。请参阅以下示例:
options =
token: process.env.HUBOT_SLACK_TOKEN
autoReconnect: !exitProcessOnDisconnect
autoMark: true
exitOnDisconnect: exitProcessOnDisconnect
proxyUrl: process.env.https_proxy
输出为16,因为#include <stdio.h>
struct flexarray {
int a[2];
double f;
};
int main(int argc, char** argv)
{
printf("sizeof (struct flexarray) = %zu\n", sizeof (struct flexarray));
return 0;
}
= 4且sizeof(int)
= 8.这很好。
但当我将a更改为sizeof(double)
时输出为24这不是我的预期,因为根据我的计算结果应为20(= 3 x 4 + 8)。
我能想到的唯一解释是编译器添加了填充整数,但我不明白为什么会发生这种情况:int[3]
为12,它毕竟是4字节的倍数。
我正在使用gcc编译32位Linux。
sizeof(int[3])
有人可以告诉我为什么好吗?
答案 0 :(得分:3)
如果使用offsetof
检查类成员的位置,您可能会发现编译器希望{8}字符边界上的double
值对齐。