c程序的内存分配
2017-12-06 10:22
281 查看
程序的地址空间
用一张图来说明:说明一下各区域:
栈区:由编译器自动分配释放、存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
堆区:一般由程序员分配释放,若程序员不释放,程序结束后可能由OS回收。
全局区(静态区):存放全局变量,静态数据,常量。程序结束后由系统释放。
代码区:存放函数体的二进制代码。
内存分配方式
从静态存储区域分配:内存在程序编译时已经分配好,这块内存在程序的整个运行期间都存在。 例如 :全局变量,static修饰的局部变量。
在栈上创建
在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元被自动释放。
从堆上分配
动态内存分配,程序在运行时可用malloc或new申请任意多少内存,由程序员自己负责在何时free或delete释放内存。 如果不释放申请开辟的空间,会出现内存泄漏。