C++之对象内存分配
在c++中类在实例化一个对象时,只为对象分配了存放成员变量的空间,如果类中存在虚函数那么还会分配一个指针大小的空间去存放指向虚表指针
现在让我们来看看在c++中编译器是怎样为对象分配空间的
其实和为结构体分配空间是一样的,分配一块能容纳所有成员的空间,成员按类中声明出现的先后顺序以次排列放在空间中
查看其反汇编代码
会看到编译器在栈上为其分12个字节的空间(字节对齐),
配查看构造函数的反汇编代码
会发现指令把0放入了[this]单元,把1放入[this+4]单元,把5放入[this+8]单元,我们再回头看下c++代码对照下我们就可以发现成员变量是按在类中声明的顺序依次存放在对象空间的
下面让我们看下类中有虚函数时对象的空间分配是怎样的
查看反汇编代码
发现比没有虚函数的对象多了4个字节的空间,多出的这4个字是干啥的?
查看构造函数的反汇编代码
发现[this]单元存放的是一个指向vtabl(virtual table)的地址,多出的这4个字节就是存放指向虚函数表的指针,vptr是存放在对象的最前面的,,,,,,,