C++类的实例的内存布局-阅《Reverse C++》有获(1)

一、在 Visual C++中,类的成员变量是按照其声明的大小依次排列在内存中的。
为了验证这一点,我将昨天的一个示例稍稍修改了一下:


#include
using namespace std;

class A{
  private:
    char ch;         //将char类型的成员变量提前放置
    int a,b;    
    
  public:
    A(){
      cout<<"调用构造函数\n";
      a=2;
      b=3;
    }
    ~A(){
      cout<<"调用析构函数\n";
    }
    
    void display(){
      cout<<"a+b="<    }
};
  
int main(){
  A a;
  a.display();
  
  return 0;
}

在命令行下编译:

E:\Programming\c_cpp>cl classA.cpp /EHsc -d1reportAllClassLayout > class.layout

在生成的class.layout文件里,可以看到:


class A  size(12):
  +---
0  | ch
    | <alignment member> (size=3)
4  | a
8  | b
  +---

这里并没有按其声明的大小,而是按声明的先后来放置的。不知道这里是否是笔误?
只不过,这还可以看出在内存布局中的对齐情况,这里是按4字节对齐的,所以char成员就多了一个3字节的空白,用以对齐!

发表评论