在 cl 编译器选项 /Zp 的 msdn 上,提到“在 8 字节边界上打包结构(默认)”。这是否意味着如果存在大小 > 8 字节的数据类型,默认情况下(没有编译器选项或编译指示包)它不会自然对齐,而是 8 字节对齐。如果是,那么 GCC/clang 就是这种情况吗?
我检查了 GCC,使用-fpack-struct
and __uint128_t
,它没有任何这样的默认值。例如sizeof(tStruct)
是 32 和 24:
struct tStruct {
uint64_t a;
__uint128_t b;
};
我无法在 Windows 上检查相同的内容,因为它不提供任何大于 8 字节的数据类型。