使用 cl/gcc/clang 的默认结构包装是什么?

Abh*_*ain 5 c++ gcc visual-c++ cl struct-member-alignment

在 msdn for cl 编译器选项 /Zp 上,提到“在 8 字节边界(默认)上打包结构”。这是否意味着如果数据类型的大小 > 8 字节,默认情况下(没有编译器选项或编译指示包)它不会自然对齐,而是具有 8 字节对齐。如果是,GCC/clang 是这种情况吗?

我检查了 GCC,使用-fpack-struct__uint128_t,它没有任何这样的默认值。例如sizeof(tStruct)是 32 和 24:

struct tStruct {
uint64_t    a;
__uint128_t b;
};
Run Code Online (Sandbox Code Playgroud)

我无法在 Windows 上进行检查,因为它不提供任何大于 8 字节的数据类型。