new/delete | malloc/free |
是运算符(只能重载,不能定义) | 库函数(名字随便起) |
能调用构造函数和析构函数 | 只能申请内存空间 |
抛异常 | 不抛异常,会返回NULL |
分配内存设计,分配算法,查找,避免内存碎片,导致效率太低,因此程序员喜欢自己写new/delete,或者创建一个内存池来管理内存,提高效率。 | malloc从堆里获得空间,有一个将可用内存块连接起来的空闲链表,free释放内存块时,将释放的内存块再次链接到空闲链表中。由于多次操作,最后的空闲链表会有很多小内存块,malloc申请时候没有足够大的,空闲链表就会试图去将小的组合成大的,此时就会延时请求,组合好足够大的内存块后再分配给malloc函数,所以在调用malloc动态申请内存时,一定要判断返回值。 |
共性:申请动态内存,释放内存 | |
new内置了sizeof,可自动计算所需空间 | 手工计算 |
抛出异常(给出错误地方直接改) | C语言中malloc/calloc/realloc/valloc/alloca/memalign函数内存分配失败后都会返回NULL,所以判断if(p1==NULL)就好 |
使用free和delete后,一定要给指针赋空值或指向合法内存空间对象,避免野指针,例如:delete[]p; | |
| 分配的是虚拟内存 |
new/delete和malloc/free的关系与区别
最新推荐文章于 2021-07-02 19:58:16 发布