资料介绍
内存管理
内存内存管理篇
欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:
640K ought to be enough for everybody
— Bill Gates 1981
程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是
发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入
得多,读者需细心阅读,做到真正地通晓内存管理。
7.1内
内存分配方式有三种:
(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的
整个运行期间都存在。例如全局变量,static变量。
(2) 在栈(栈用来处理程序运行的许多事务:保存函数调用时的返回地址、函数的变
元、局部变量以及CPU的当前状态)上创建。在执行函数时,函数内局部变量的存储单元
都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于
处理器的指令集中,效率很高,但是分配的内存容量有限。
|栈 |
| 堆 |
|全局变量 |
|程序代码 |
(3) 从堆(堆是一个自用内存区域,程序可利用C语言的动态分配函数使用它)上分
配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员
自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵
活,但问题也最多。
7
。
一个C程序在内存中的映像图
常见的内存错误及其对策如下:
υ 1 内存分配未成功,却使用了它。
编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在
使用内存之前