wat*_*180 5 c++ gcc alignment icc visual-studio
一行代码值千言万语:)这是我的问题:
/* 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);
Run Code Online (Sandbox Code Playgroud)
我可以期望所有断言都通过SSE支持的平台吗?谢谢.
编辑.部分答案.我用VS2008,GCC和ICC进行了一些测试.MS编译器确实对齐了ptr和ptr2,但是GCC和ICC未能对齐ptr2.
换句话说,您可以使用该标准来证明您的假设是正确的,即它应该有效,但实际上,它可能会在您面前爆炸。
Visual C++ 6 没有正确对齐doubles分配的 via new,所以就这样了。
| 归档时间: |
|
| 查看次数: |
6403 次 |
| 最近记录: |