相同点:同样是内存的静态申请和释放
不同点:new/delete是c++运算符,malloc/free是c++语言标准库函数;
new自动计算分配的空间,malloc需要自己手动计算;
## new/delete的实现:
调用名为operate new/operate delete的标准库函数来实现的,分配足够大的内存来保存指定类型的一个对象。
对指针指向的对象运行适当的析构函数;然后用delete标准库来释放。
## malloc和new的区别:
## new做了什么:
1. 先调用operate new--里面有malloc函数;
2. 再调用构造函数;
理解:先申请一块地,才能盖改房子。
## 既然有了malloc/free,C++中为什么还需要new/delete呢?直接用malloc/free不好吗?
malloc和free是库函数,是已经编译好了的,无法执行析构和构造的功能。
## 被free回收的内存是立即返还给操作系统吗?
不是的,被free回收的内存会首先被ptmalloc使用双链表保存起来,当用户下一次申请内存的时候,会尝试从这些内存中寻找合适的返回。这样就避免了频繁的系统调用,占用过多的系统资源。同时ptmalloc也会尝试对小块内存进行合并,避免过多的内存碎片