C程序的内存分配及动态内存
1、程序内存的分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1)栈区(stack) — 由编译器自动分配释放 , 存放为运行函数而分配的局 部变量、 函数参数、 返回数据、 返回地址等。 其操作方式类似于数据结构中的 栈。 2)堆区(heap) — 一般由程序员分配释放, 若程序员不释放, 程序结束 时可能由OS回收,否则程序就会存在内存泄漏的问题 。 分配方式类似于链表。 3)全局区(静态区) (static) —存放全局变量、 静态数据、 常量。 程序结 束后由系统释放。 4)文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放。 5) 程序代码区—存放函数体(类成员函数和全局函数) 的二进制代码 内存分配方式有三种: 1)从静态存储区域分配: 内存在程序编译的时候就已经分配好, 这块内存在程序的整个运行期 间都存在。 例如全局变量, static 变量。 2)在栈上创建: 在执行函数时, 函数内局部变量的存储单元都可以在栈上创建, 函数 执行结束时这些存储单元自动被释放。 栈内存分配运算内置于处理器 的指令集中, 效率很高, 但是分配的内存容量有限。 3)从堆上分配: 亦称动态内存分配。 程序在运行的时候用 malloc 或 new 申请任意多少的内存, 程序员自己负责在何时用 free 或 delete 释放内存。 动态内存的生存期由程序员决定,