文章参考:细说new和malloc区别
Linux虚拟地址空间布局以及进程栈和线程栈总结
在内存分配中会涉及到栈和堆(和数据结构中的堆栈不同),所以先介绍以下在内存中栈和堆的区别
heap vs. stack
key points:
- 堆(heap):持久化、顺序随意、全局
- 栈(stack):临时、 后进先出、局部
1、申请方式
- 堆:由程序员自己申请并指明大小的,当进程调用malloc / new等函数分配内存时,新分配的内存动态添加到堆上(扩张);当调用free / delete等函数释放内存时,被释放的内存从堆中剔除(缩减) 。
- 栈:系统自动分配的,如声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间,有以下三个方面的用途:
- 为函数内部声明的非静态局部变量(C语言中称“自动变量”)提供存储空间。
- 记录函数调用过程相关的维护性信息,称为栈帧(Stack Frame)或过程活动记录(Procedure Activation Record)。它包括函数返回地址,不适合装入寄存器的函数参数及一些寄存器值的保存。除递归调用外,