可能重复:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
为什么输出为8
?
不是sizeof(int)+sizeof(char) = 5
?
class CBase
{
int a;
char p;
};
int main() {
cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
getchar();
} ///:~
答案 0 :(得分:5)
内存通常由编译器对齐以获得更好的性能。因此,类或结构在内存中占用的空间可能多于其各部分的总和。
答案 1 :(得分:1)
看起来好像编译器/运行时已对齐到8字节边界。您可能会发现可以通过编译器或运行时开关更改此设置。例如,在AIX上,C ++内存分配与16字节对齐,这可能导致它们使用更多内存。
要不进行此对齐,可以在运行时解决此问题(其缺点是应用程序无法使用VMX)只需在运行应用程序之前为应用程序设置此环境变量:
export LIBCPP_NOVMX=1