嗨,我知道 C 标准在执行 sizeof 时需要内存对齐。但我不太明白为什么即使是整数数组也需要对齐。请参阅我的以下示例:
#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;
}
输出为 16,因为 sizeof(int)
= 4 且 sizeof(double)
= 8。这很好。
但是当我将 a 更改为 int[3]
时,输出是 24 这不是我所期望的,因为根据我的计算结果应该是 20 (= 3 x 4 + 8)。
我能想到的唯一解释是编译器添加了一个填充整数,但我不明白为什么会发生这种情况:sizeof(int[3])
是 12,它是 4 的倍数毕竟字节。
我正在使用 gcc 在 32 位 Linux 上进行编译。
Linux 93c9e1096795 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
谁能告诉我为什么?
最佳答案
如果您使用 offsetof
检查类成员的位置,您可能会发现编译器希望 double
值在 8 字节边界上对齐。
关于c sizeof 整数对齐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37934464/