【发布时间】:2014-03-19 19:58:24
【问题描述】:
范围在 x86
例如,我们有一个这样的结构:
struct X{
int a;
char b;
// compiler will pad 3 bytes here
double c;
};
X x;
我认为x的对齐应该是其中最大的成员,本例是double,也就是8字节,
所以&x 应该是 8 的倍数,对吗?
但是,经过一些测试,我的编译器 (msvc 2013) 说 &x 也可以是 4 的倍数,但不能是 8。
不是说&x.c 也是4的倍数吗?
我在哪里误解了?
【问题讨论】:
-
我很想看到除四以外的数字是四的倍数,但不是八。开个玩笑,虽然在跨平台兼容性方面您不能过多依赖,但您的系统很可能确实指定了此类事情或遵守规范。例如,System V specification for x86 指定
double对齐到四个字节,而不是八个。
标签: c++ memory-alignment