第1页共23页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共23页C++内存管理详解程序员们经常编写内存管理程序,往往提心吊胆
如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的
本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理
1、内存分配方式内存分配方式有三种:(1)从静态存储区域分配
内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在
例如全局变量,static变量
(2)在栈上创建
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放
栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限
(3)从堆上分配,亦称动态内存分配
程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存
动态内存的生存期由我们决定,使用非常灵活,但问题也最多
2、常见的内存错误及其对策发生内存错误是件非常麻烦的事情
编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到
而这些错误大多没有明显的症状,时隐时现,增加了改错的难度
有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了
常见的内存错误及其对策如下:第2页共23页第1页共23页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共23页*内存分配未成功,却使用了它
编程新手常犯这种错误,因为他们没有意识到内存分配会不成功
常用解决办法是,在使用内存之前检查指针是否为NULL
如果指针p是函数的参数,那么在函数的入口处用assert(p
=NULL)进行检查
如果是用malloc或new来申请内存,应该用if(p==NULL)或if(p
=NULL)进行防错处理
*内存分配虽然成功,但