适用对象
《生产管理知识-C++内存管理详解(doc27)》是关于其它行业相关企业安全管理制度相关内容,适用于其它行业相关企业。
文本预览
C++
内存管理详解
程序员们经常编写
内存管理
程序,往往提心吊胆。如果不想触雷,唯一的解
决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容
比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓
内存管理。
1、
内存分配方式
内存分配方式有三种:
(1)从静态存储区域
分配。
内存在
程序编译的时候就已经
分配好,这
块
内存在
程序的整个运行期间都存在。例如全局变量,static 变量。
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以
在栈上创建,函数执行结束时这些存储单元自动被释放。栈
内存分配运算内
置于处理器的指令集中,效率很高,但是
分配的
内存容量有限。
(3) 从堆上
分配,亦称动态
内存分配。
程序在运行的时候用 malloc
或 new 申请任意多少的
内存,
程序员自己负责在何时用 free 或 delete 释放
内存。动态
内存的生存期由我们决定,使用非常灵活,但问题也最多。
2、常见的
内存错误及其对策
发生
内存错误是件非常麻烦的事情。编译器不能自动发现这些
错误,通常是
在
程序运行时才能捕捉到。而这些
错误大多没有明显的症状,时隐时现,增
加了改错的难度。有时用户怒气冲冲地把你找来,
程序却没有发生任何问题,
你一走,
错误又发作了。 常见的
内存错误及其对策如下:
*
内存分配未成功,却使用了它。
编程新手常犯这种
错误,因为他们没有意识到
内存分配会不成功。常用
解决办法是,在使用
内存之前检查指针是否为 NULL。如果指针 p 是函数的参
数,那么在函数的入口处用 assert(p!=NULL)进行
检查。如果是用 malloc 或 new 来申请
内存,应该用 if(p==NULL) 或
if(p!=NULL)进行防错处理。
*
内存分配虽然成功,但是尚未初始化就引用它。
犯这种
错误主要有两个起因:一是没有初始化的观念;二是误以为
内存
的缺省
初值全为零,导致引用
初值错误(例如数组)。
内存的缺省
初值究竟
是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其
有。所以无论用何种方式创建数组,都别忘了赋
初值,即便是赋零值也不可
省略,不要嫌麻烦。
*
内存分配成功并且已经初始化,但操作越过了
内存的边界。
例如在使用数组时经常发生下标“多 1”或者“少 1”的操作。特别是
在 for 循环语句中,循环次数很容易搞错,导致数组操作越界。
免责申明
本网站提供的生产安全相关模板文件仅供参考和示例之用,属于通用性资料。用户下载并使用这些模板,即表示理解并同意:
- 本文件不构成任何法律、专业安全咨询或特定情况下的建议。
- 用户有责任根据自身具体业务、所在地法律法规及行业标准,对模板进行审查、修改和定制,确保其适用性、准确性和合规性。
- 网站运营方对用户因使用、误用或依赖本网站提供的模板文件而导致的任何直接、间接、偶然或特殊的损失或损害(包括但不限于安全事故、经济损失、法律责任)概不负责。
- 本网站及其运营方明确免除因用户访问、下载、使用或无法使用这些模板文件而直接或间接引起的或与之相关的任何及所有索赔、损失、损害(包括人身伤害、财产损失、业务中断、数据丢失等)或法律责任。
文件格式
提供Word(.doc)和PDF两种格式文件,包含可直接编辑的模板文件和参考示例。