1

可能重复:
为什么结构的 sizeof 不等于每个成员的 sizeof 之和?

为什么输出是8
不是sizeof(int)+sizeof(char) = 5吗?

class CBase 
{ 
    int a; 
    char p; 
}; 

int main() {

    cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
    getchar();
} ///:~
4

2 回答 2

5

内存通常由编译器对齐以获得更好的性能。因此,一个类或结构在内存中占用的空间比其各部分的总和还要多。

于 2012-05-14T09:00:37.483 回答
1

看起来编译器/运行时已与 8 字节边界对齐。您可能会发现可以通过编译器或运行时开关来更改它。例如,在 AIX 上,C++ 内存分配与 16 字节对齐,这可能导致它们使用更多内存。

要不进行这种对齐,有一种方法可以在运行时解决此问题(其缺点是应用程序无法使用 VMX)只需在运行应用程序之前为应用程序设置此环境变量:

export LIBCPP_NOVMX=1
于 2012-05-14T09:21:23.410 回答