一行代码胜过千言万语:)这里是我的问题:C++内存对齐问题
/* Platform specific 16-byte alignment macro switch.
On Visual C++ it would substitute __declspec(align(16)).
On GCC it substitutes __attribute__((aligned (16))).
*/
#define ALIGN_16 ...
struct ALIGN_16 A {...};
A* ptr = new A;
A* ptr2 = new A[20];
assert(size_t(ptr) % 16 == 0);
for (int i=0; i<20; ++i)
assert(size_t(ptr2+i) % 16 == 0);
assert(sizeof(A) % 16 == 0);
我能想到的所有断言通过与SSE支持的平台?谢谢。
编辑。部分答案。我用VS2008,GCC和ICC做了一些测试。 MS编译器确实对齐ptr和ptr2,但是GCC和ICC未能对齐ptr2。
为什么20的阵列如? – John 2010-12-15 00:03:08
只是我的头。如果阵列中的每个元素都对齐,我就会徘徊。 – watson1180 2010-12-15 00:22:49
正确分配的数组的元素由标准保证为所讨论的类型正确对齐。然而,这种对齐是一个实现细节,理论上可能是一个字节(即压缩对齐)。 – 2010-12-15 00:30:01