malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存
1 内存
1 栈区
编译器自动分配,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
操作方法类似于数据结构中的栈,先进后出。
2 堆区
程序员分配释放。
3 全局区(静态区)
全局变量、静态数据、常量
程序结束后由系统释放。
4 文字常量区
常量字符串
5 程序代码区
函数体(类成员函数和全局函数)的二进制代码。
栈和堆这部分内存会随程序的运行不断分配和释放。
全局区、常量区、代码区在程序运行期间会一直存在,最后由系统释放。
2 malloc和new二者区别
自身性质
内存位置
分配成功后返回类型
分配失败返回
是否需要强制类型转换
能否满足动态对象的需求
能否互相调用
能否重载
能够在分配时扩充
是否需要显式定义内存大小
处理数组
3 new的优势
1.不需要进行强制类型转换,使用简单方便。
2.通过调用构造函数初始化动态创建的对象,执行效率更高;
3.能够进行异常处理,使用更安全。
4 delete和delete[]
new[]一定与delete[]搭配使用。
delete只调用一次析构函数,而delete[]会逐个调用,释放所有对象数组的内存。
基本数据类型没有析构函数,因此delete就能满足要求。
![delete