刚刚注意到一些对我来说很奇怪的东西。默认情况下,Visual C++ 不会将对象对齐在其所需的边界中。例如 long long 与 4 字节边界对齐,而 __alignof(T) 返回 8(据我所知,它总是返回类型的大小)。所以看起来它没有正确对齐。例如
long long a1;
char g;
long long a2;
// alignment check for &a2 fails
if (((uintptr_t)&a2 & (__alignof(long long) - 1)) != 0) // failed
我还尝试仅打印指针,其值为&a2
(0x0035F8FC
以3537148
dec 为单位)。
有什么我错了吗?我需要正确对齐的 long long 类型的对象。我能做些什么呢?我可以使用__declspec(align())
微软扩展,但它需要文字数字,所以我不能写这样的东西。
__declspec(align(__alignof(long long))) long long object;