C++内存管理

来源:互联网 发布:数据库系统答案 编辑:程序博客网 时间:2024/06/09 18:20


计算机中的内存在用于编程时,被人为的进行了分区(Segment),分为:“栈区”(Stack)、“堆区”(Heap)、全局区(静态区,Static)、文字常量区和程序代码区。在前面的课程中,我们主要直接涉及到的是栈区的内存,在你的程序中,函数的参数值,局部变量的值等都被存在了“栈区”,这部分的内存,是由系统来来帮助你来管理的,没有特殊情况的时候,你是不需要对其进行特别处理的。


而针对堆区的内存,一般由程序员进行分配(new)和释放(delete), 使用堆内存的原因一般是“栈上内存比较小,不够用”、“系统管理内存的方式死板,不方便用”这两大类原因。对于堆上的内存,被程序员手动分配后,若程序员不释放就可能会出现“内存泄漏”。很多企业级的应用,都因为内存泄漏而在“正常”运转很长时间后,轰然“坍塌”。在后面的入门课程中,我们会简单的对这块的知识进行介绍。

全局区、文字常量区和程序代码区在我们入门阶段,暂时还可以不去过多理解(甚至看不懂也无妨),只需要知道他们的大致作用即可——全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放;文字常量区是用于储存常量字符串的, 程序结束后由系统释放;程序代码区用于存放函数体的二进制代码。

eg:

int *arr = new int[10];//分配内存

delete [] arr;//释放内存

arr = NULL;//好的习惯,避免“悬垂指针”


0 0