遵循主题C++ 中的数组与包含的类型相比如何对齐?我做了一个实验。
这是代码:
#include<iostream>
using namespace std;
int main()
{
const int N = 12;
{
float p1[N], p2[N];
cout << p1 << " " << p2 << " " << p2 - p1 << endl;
}
{
float* p1, *p2;
// allocate memory
p1 = new float[N];
p2 = new float[N];
cout << p1 << " " << p2 << " " << p2 - p1 << endl;
delete[] p1;
delete[] p2;
}
}
根据引用的问题和维基,我希望 p1 和 p2 将 sizeof(float) == 4 字节对齐。但结果是:
0x7fff4fd2b410 0x7fff4fd2b440 12
0x7f8cc9c03bd0 0x7f8cc9c03c00 12
对于 N = 9、11 和 12,数组之间的距离相同 12。对于 N = 8,距离 (p2-p1) 为 8。所以看起来浮点数组是 16 个字节对齐的。为什么?
PS 我的处理器是 Intel Core i7
编译器 - g++ 4.6.3
似乎将数组放在一个结构中可以获得 10 个浮点距离:
const int N = 10;
struct PP{
float p1[N], p2[N];
};
int main() {
PP pp;
cout << pp.p1 << " " << pp.p2 << " " << pp.p2 - pp.p1 << endl;
}
0x7fff50139440 0x7fff50139468 10