定义一个类如下:
它的内存分布如图:
以上就完成内存布局的理解了,为了更好的运用,下面举个例子:
对上面代码的分析:
注:上面所有内容来某个自某个csdn网友个人理解,我感觉应该没问题(除非比较变态的c++编译器)。
下面内容比较杂,转自:http://blog.youkuaiyun.com/mal327/article/details/6784254
如何计算类对象占用的字节数?
一个空类的话1个字节。这是为了保证n个连续空类声明时,变量地址有偏移,防止变量覆盖。
非空类的话用关键字sizeof计算。
如果手工计算就相当麻烦,光padding就一堆规则了。而且有些额外信息比如虚函数(多个虚函数也只产生一个vptr指针)等等。
一个类成员 ,当有虚函数时,有以下成分:各个数据成员,数据对齐产生的间隙,一个虚函数表的 "指针"(无虚不存在)。
构造函数不能用 memset(this, 0, sizeof(*this))) 初始化。原因就是每个类里面除了数据成员之外 ,还有一个虚函数表指针 。memcpy另一个同类型类的实例内容过去倒是可以 ,这种情况下该函数表指针可以正确复制过去。
注意虚函数表只在类有虚函数的情况下才存在, 没有虚函数不存在。 构造函数悄悄地帮你设置虚函数表的内容,并把正确的指针存放在对象中。
类在内存中分布
首先请看程序:
#include <iostream>
using namespace std;
class base{
public:
virt