C++进阶---new&delete

new&delete

在c语言里面,malloc和free经常配套出现,而在C++里面用到的则是new和delete
下面是一段malloc动态内存分配:

#include <stdio.h>
#include <malloc.h>
int main(int argc, char* argv[])
{
	int* pi = (int*)malloc(sizeof(int)*1024);
	return 0;
}

给malloc加个断点
在这里插入图片描述
转到反汇编
在这里插入图片描述
我们看到只有一个call,所以直接跟进这个malloc函数
在这里插入图片描述
也只有一个call,跟进去。照此步骤一直找call,直到找到HeapAlloc函数
在这里插入图片描述
发现这次的call是个FF间接call,这个HeapAlloc函数就是malloc调用的最后的函数了

这个call的函数的最后有个地址0042d16c,这是个IAT表,所以这个call调用的并不是这个0042d16c,而是这个地址里面存的值
在这里插入图片描述
跟进这个地址,我们发现,地址的大小已经大变样了,7C开头的地址证明已经到dll的领空了
通过查询我们发现HeapAlloc函数是KERNEL32.dll导入库下的一个API。也就是说,我们甚至可以直接用HeapAlloc函数进行内存分配,只是里面的参数太多,需要我们自己设置,太麻烦,而malloc是直接就能用的,所以我们平时用的是malloc
在这里插入图片描述
然后再对new进行跟踪,我们总结发现经过层层调用它们的本质其实是一样的,都是最后调用HeapAlloc函数进行内存分配。free和delete的本质也是同理

本文为参考滴水三期的学习笔记,若有错误请指正,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值