用户定义的类的大小

zha*_*nwu 3 c++ memory-management

为什么以下代码中类cl1的大小是8而不是5,而类cl2的大小是1?

class cl1 {                                                                                                                                                                               
public:                                                                                                                                                                                   
    int n;                                                                                                                                                                                
    char cb;                                                                                                                                                                              
    cl1();                                                                                                                                                                                
    ~cl1();                                                                                                                                                                               
};                                                                                                                                                                                        

class cl2 {                                                                                                                                                                               
public:                                                                                                                                                                                   
    char cb;                                                                                                                                                                              
    cl2();                                                                                                                                                                                
    ~cl2();                                                                                                                                                                               
};                                                                                                                                                                                        
Run Code Online (Sandbox Code Playgroud)

Nic*_*yer 6

编译器可以在类成员之间和之后插入填充,以确保变量正确对齐等.确切地说,插入的填充取决于实现.在这种情况下,我猜测编译器之后添加了3个字节的填充cl1::cb,可能是为了确保内存中的下一个变量在4字节边界上对齐.

  • 很好的答案,但这不是因为你必须对齐下一个变量.下一个变量可以是char(align = 1)或long long(例如,align = 8).它是专门处理类型的_arrays_ - 因为第二个元素的`n`将是align = 4,这就是为什么需要填充的原因. (2认同)