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."
我知道结构打包在 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."