C++ 关于不同类型的sizeof()类

C++ 关于不同类型的sizeof()类,c++,size,sizeof,C++,Size,Sizeof,可能重复: 为什么输出为8? 不sizeof(int)+sizeof(char)=5 class CBase { int a; char p; }; int main() { cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; getchar(); } ///:~ class-CBase { INTA; charp; }; int main(){ cout内存通常由编译

可能重复:

为什么输出为
8

sizeof(int)+sizeof(char)=5

class CBase 
{ 
    int a; 
    char p; 
}; 

int main() {

    cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
    getchar();
} ///:~
class-CBase
{ 
INTA;
charp;
}; 
int main(){

cout内存通常由编译器对齐以获得更好的性能。因此,类或结构在内存中占用的空间可能大于其部分之和。

内存通常由编译器对齐以获得更好的性能。因此,类或结构在内存中占用的空间可能大于其部分之和。

看起来就像编译器/运行时一样与8字节边界对齐。您可能会发现,通过编译器或运行时开关可以改变这一点。例如,在AIX上,C++内存分配被对齐到16字节,这可能导致它们使用更多内存。 要避免这种对齐,有一种方法可以在运行时解决此问题(其缺点是应用程序无法使用VMX),只需在运行应用程序之前为其设置此环境变量:

export LIBCPP_NOVMX=1

看起来编译器/运行时已经对齐到8字节边界。您可能发现可以通过编译器或运行时开关来改变这一点。例如,在AIX上,C++内存分配被对齐到16字节,这可能导致它们使用更多内存。 要避免这种对齐,有一种方法可以在运行时解决此问题(其缺点是应用程序无法使用VMX),只需在运行应用程序之前为其设置此环境变量:

export LIBCPP_NOVMX=1

此处的更多说明-->此处的更多说明-->编译器不需要对齐到8个字节,它可能只想将
int
s对齐到4个字节。编译器不需要对齐到8个字节,它可能只想将
int
s对齐到4个字节。特别是在这种情况下:如果创建
CBase
的数组,则下一个元素b在前一个字节结束后的下一个字节中开始。因此,为了确保
a
在数组的每个元素中都是4对齐的,实现将
CBase
填充为4的倍数。结构的大小始终是其对齐要求的倍数。特别是在这种情况下:如果创建
CBase
的数组,则下一个元素在前一个结束后的下一个字节中开始。因此,为了确保
a
在数组的每个元素中都是4对齐的,实现将
CBase
填充为4的倍数。结构的大小始终是其对齐要求的倍数。