1 C++C++内存管理详解内存管理详解内存管理详解 ------------------GUOJIEGUOJIE 结合论坛贴子与自学相关知识结合论坛贴子与自学相关知识整理于整理于07.08.1207.08.12 1、 内存分配方式内存分配方式 内存分配方式有三种内存分配方式有三种:: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3) 从堆上分配,亦称动态内存分配。程序在运行的时候用 malloc 或 new申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。 附: C ++程序的内存格局: 内存区域 存放的数据 全局数据区 data area 全局变量 , 静态变量 , 常量 代码区 code area 所有类成员函数和非成员函数代码 栈区 stack area 为函数运行而分配的局部变量 , 函数参数 , 返回数据 , 返回地址等 堆区(自由存储区)heap area 以上余下的空间都被用作堆区 2、常见的内存错误及其对策常见的内存错误及其对策 发生内存错误是件 非常麻 烦 的事 情 。编译器不 能 自动发现 这些错误,通 常是在程序运行时才 能 捕 捉 到 。而这些错误大 多没 有明 显 的症 状 ,时隐 时现 ,增 加 了改 错的难 度 。 常见的内存错误及其对策如下: * 内存分配未 成功 ,却 使用了 它 。 编程新 手 常犯 这种错误,因 为他 们没 有意识到 内存分配会 不 成功 。 常用解决办 法 是: 在使用内存之 前 检 查 指针 是否 为NULL。 如果 指针 p 是函数的参数,那 么 在函数的入 口 处用 assert(p!=NULL)进 行检查 。 如果 是用 malloc 或 new 来 申请内存,应 该 用 if(p==NULL) 或 if(p!=NULL)进 行防 错处理。 * 内存分配虽 然 成功 ,但是尚 未 初 始 化 就引 用它 。 犯 这种错误主 要 有两 个起 因 : Edited by Foxit ReaderCopyright(C) by Foxit Software Company,2005-2007For Evaluation Only. 2 一是没有初始化的观念; 二是误以为内存的缺省初值全为零,导致引用初值错...