C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free

内存分配方式

内存分配方式有三种:

[1] 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量, static 变量。

[2] 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中 ,效率很高,但是分配的内存容量有限。

[3] 从堆上分配,亦称动态内存分配 。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由程序员决定 ,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

2. 程序的内存空间

一个程序将操作系统分配给其运行的内存块分为 4 个区域,如下图所示。

代码区 (code area) 程序内存空间

全局数据区 (data area)

堆区 (heap area)

栈区 (stack area)

http://blog.csdn.net/rujielaisusan/article/details/4622197

原文地址:https://www.cnblogs.com/seasonsstory/p/3284326.html