C++动态内存分配/malloc/new
0 前言
这部分确实是面试老八股了,不过我还是记录一下
1 内存分区
在C语言中,将内存分为程序代码区+数据区,其中数据区又分为静态存储区和动态存储区
在C++中,分为五种:
- 动态存储区:
- 栈区:存放局部变量,由编译器自动分配释放,程序员不能操作
- 堆:由程序员使用malloc/new申请,用free/delete释放。如果程序员忘记释放,程序运行结束后,由OS进行回收
- 全局存储区/静态存储区:存放全局变量和静态变量
- 常量存储区:存放常量,比如字符字面量
- 程序代码区
2 栈与堆
- 栈空间有限,由操作系统规定大小,分配速度极快,但是程序员控制不了它的分配与释放
- 堆空间由程序员自由决定所分配的大小,理论上物理内存多大你就可以要多大。分配速度慢,但是灵活
3 malloc/new
- 在C语言中,malloc是系统提供的函数,只有一种功能,就是申请所需大小内存
- new和delete是一种运算符,不是函数!不是函数!
- new相比malloc,除了分配内存,还有其他更加复杂的功能(待完善),所以建议使用new,而不是malloc