前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/CPP中的malloc和new的差异

C/CPP中的malloc和new的差异

作者头像
CtrlX
发布2022-11-14 15:10:32
4750
发布2022-11-14 15:10:32
举报
文章被收录于专栏:C++核心编程

引入

如何申请内存?使用malloc/new,如何为一个类对象申请内存呢?使用new,为什么要设计两套接口呢?差异是什么?

malloc和new的差异

malloc

image
image

第一条指令是把数值4赋给寄存器edi,为后面的函数调用准备参数,详细分析见CPU里的参数传递。

第二条指令是调用malloc函数,可以猜出这是要申请4个字节大小的内存块,这样看来malloc是一个单纯的函数,输入所需的内存的大小就可以帮我们申请想要大小的内存块。

new

image
image

前两条指令跟malloc十分相似,第一条指令是传递参数值8,因为类A仅有2个int类型的成员变量,所以A的大小是8个字节,

到目前为止注意类对象还需要调用构造函数进行初始化。

下面两条指令,第一条指令:把申请到的内存地址传递给寄存器rdi(调用构造函数也是需要传递this指针的)

完成了this指针的传递就可调用类A的构造函数了,及最后一条指令。

至此new操作全部完成。

free和delete的差异

free

free是malloc的反向操作,也是一个纯函数接口。它的用途是释放归还刚才申请的内存。

delete

delete是new 的反向操作,首先调用类A的析构函数

image
image

然后就可以跟free一样释放、归还类A对象所占据的内存空间。

image
image

总结

1.malloc和free都是单纯的函数用申请内存和归还内存。 2.new包含了两个操作,第一个操作跟malloc类似,也是申请内存,第二个操作是对申请到的内存,也就是类A的示例对象,进行初始化,就是调用A的构造函数。至于delet 函数正好相反 3.无论是malloc还是new,它们都是可以被重载的。(默认情况下这二者都是从堆区申请内存的。)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入
  • malloc和new的差异
    • malloc
      • new
      • free和delete的差异
        • free
          • delete
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档