C++之对象内存分配

C++之对象内存分配

在c++中类在实例化一个对象时,只为对象分配了存放成员变量的空间,如果类中存在虚函数那么还会分配一个指针大小的空间去存放指向虚表指针

现在让我们来看看在c++中编译器是怎样为对象分配空间的

其实和为结构体分配空间是一样的,分配一块能容纳所有成员的空间,成员按类中声明出现的先后顺序以次排列放在空间中

 

查看其反汇编代码

 

会看到编译器在栈上为其分12个字节的空间(字节对齐),

配查看构造函数的反汇编代码

会发现指令把0放入了[this]单元,把1放入[this+4]单元,把5放入[this+8]单元,我们再回头看下c++代码对照下我们就可以发现成员变量是按在类中声明的顺序依次存放在对象空间的

 

下面让我们看下类中有虚函数时对象的空间分配是怎样的

 

查看反汇编代码

 

发现比没有虚函数的对象多了4个字节的空间,多出的这4个字是干啥的?

查看构造函数的反汇编代码

 

发现[this]单元存放的是一个指向vtabl(virtual table)的地址,多出的这4个字节就是存放指向虚函数表的指针,vptr是存放在对象的最前面的,,,,,,,

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值