new与malloc[c++面试系列]
new与malloc的区别
- new顺从c++的思想,在堆区申请一个对象,因此它会调用对象的构造函数进行初始化,它也应该调用构造函数;malloc在堆区申请一块空间,用于存放资源
- new无需指定对象大小,可以自动计算对象大小进行资源分配;malloc需要指定资源大小。
- new和malloc都返回这块空间的起始地址,但是new返回的是跟对象同类型的指针,而malloc返回的是void指针需要强转成资源类型
- new失败是会抛异常,malloc失败时返回NULL
- new申请的资源需要delete去释放,malloc申请的资源需要free去释放;delete会调用对象的析构函数进行资源清理
被free回收的内存是立即返还给操作系统吗?为什么
- 不是,free释放的资源会被内存分配器ptmalloc使用双链表先保存起来,当用户下次进行资源申请时,ptmalloc会先从这些内存中寻找合适的内存进行返回
-
当一个内存块被
free
时,ptmalloc
首先会检查相邻的内存块是否也是空闲的。如果是,它会将这些相邻的空闲块合并成一个更大的空闲块。这是为了减少内存碎片,提高内存利用率