C++ Class 打包/成员对齐

C++ Class packing / member alignment

我知道结构打包在 C++ 编程中很常见(至少在低内存系统上)。但是 类 呢? 我知道它有效,因为我试过了

#include <iostream>

#pragma pack(push, 1)
class Test_Packed {
    uint8_t t;
    uint32_t test;
};
#pragma pack(pop)

class Test_Unpacked {
    uint8_t t;
    uint32_t test;
};

int main() {
    std::cout<<sizeof(Test_Packed) << " / " << sizeof(Test_Unpacked)<<std::endl;
    return 0;
}

正确输出“5 / 8”。

我可以假设所有符合标准的编译器都是这种情况吗,或者这个实现是否已定义?

我知道添加虚拟成员(因此需要 vtable)会在前面添加额外的数据。失败的其他原因可能是什么?

除了在某些平台上性能不佳之外,这会导致任何问题吗?

#pragma 的文档指出:

Implementation defined behavior is controlled by #pragma directive.

所以 #pragma pack(push, 1)#pragma pack(pop) 的影响(如果有的话) 完全 "implementation defined."