ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

new与malloc[c++面试系列]

2026/8/25 16:48:39 拓冰建站 浏览量
new与malloc[c++面试系列]

new与malloc的区别

  1. new顺从c++的思想,在堆区申请一个对象,因此它会调用对象的构造函数进行初始化,它也应该调用构造函数;malloc在堆区申请一块空间,用于存放资源
  2. new无需指定对象大小,可以自动计算对象大小进行资源分配;malloc需要指定资源大小。
  3. new和malloc都返回这块空间的起始地址,但是new返回的是跟对象同类型的指针,而malloc返回的是void指针需要强转成资源类型
  4. new失败是会抛异常,malloc失败时返回NULL
  5. new申请的资源需要delete去释放,malloc申请的资源需要free去释放;delete会调用对象的析构函数进行资源清理

free回收的内存是立即返还给操作系统吗?为什么

  1. 不是,free释放的资源会被内存分配器ptmalloc使用双链表先保存起来,当用户下次进行资源申请时,ptmalloc会先从这些内存中寻找合适的内存进行返回
  2. 当一个内存块被 free 时,ptmalloc 首先会检查相邻的内存块是否也是空闲的。如果是,它会将这些相邻的空闲块合并成一个更大的空闲块。这是为了减少内存碎片,提高内存利用率