您的位置:首页 > 其它

c程序的内存分配

mxrrr_sunshine 2017-12-06 10:22 39 查看

程序的地址空间

用一张图来说明:



说明一下各区域:

栈区:由编译器自动分配释放、存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。

堆区:一般由程序员分配释放,若程序员不释放,程序结束后可能由OS回收。

全局区(静态区):存放全局变量,静态数据,常量。程序结束后由系统释放。

代码区:存放函数体的二进制代码。

内存分配方式

从静态存储区域分配:

内存在程序编译时已经分配好,这块内存在程序的整个运行期间都存在。
例如 :全局变量,static修饰的局部变量。


在栈上创建

在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元被自动释放。


从堆上分配

动态内存分配,程序在运行时可用malloc或new申请任意多少内存,由程序员自己负责在何时free或delete释放内存。
如果不释放申请开辟的空间,会出现内存泄漏。
标签: