C++ 中类的数据成员变量在内存的布局:所有的static类型的数据成员都存储在数据区,只有一份实例,所有的类对象共享这些static数据。而所有的非static数据成员则直接存储在对象内部。
有一个要注意的地方就是基类的数据成员在派生类中的内存布局情况。
C++语言保证:出现在derived类中的base类子对象由其完整原样性。先看下代码
#include <iostream>
using namespace std;
class Base
{
private:
int i;
char c;
};
class Derived : public Base
{
private:
char c;
};
int main()
{
Base b;
Derived d;
cout<<"Base : "<<sizeof(b)<<endl;
cout<<"Derived : "<<sizeof(d)<<endl;
return 0;
}
输出结果:
其内存布局为:
如果将Derived类的数据成员与基类的数据成员合并在一起:
当发生基类对象的复制操作时,会破坏Derived类的数据成员。
但是我用GCC编译上面的程序时,Derived类的大小也是8个字节,和基类的一样。不知道它的内存布局是不是和上图一样。