一、在 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字节的空白,用以对齐!