« RSA SecurID 双因素认证(Two-Factor Authentication) (导言) | Main | 用 php 写 script 管理脚本 »
December 24, 2005
从内存泄漏(Memory Leak)提到内存管理
|
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 http://windtear.net/archives/2005/12/24/000864.html http://windtear.net/archives/2005/12/24/000864.html 从内存泄漏(Memory Leak)提到内存管理 昨天下午忙着追一个内存泄漏问题 今天就blog写写内存的事 林锐在《高质量C++/C编程指南》第七章详细总结了内存管理这一块 内存分配: 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好, 这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建, 函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中, 效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存, 程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定, 使用非常灵活,但问题也最多。 指针与数组的对比: 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。 数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。 指针远比数组灵活,但也更危险。 栈内存在函数结束时自动消亡 函数malloc的原型如下: void * malloc(size_t size); 用malloc申请一块长度为length的整数类型的内存,程序如下: int *p = (int *) malloc(sizeof(int) * length); 我们应当把注意力集中在两个要素上:“类型转换”和“sizeof”。 函数free的原型如下: void free( void * memblock ); 如果p是NULL指针,那么free对p无论操作多少次都不会出问题。 如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误。 【规则7-2-4】动态内存的申请与释放必须配对,防止内存泄漏。 |
Posted by windtear at December 24, 2005 5:28 PM
Trackback Pings
TrackBack URL for this entry:
http://cgi.windtear.net/cgi-bin/wt-tb.cgi/864
Comments
Post a comment
【我爱网络】
2007-12-31 23:51 2007年度 ipcn.org/ipchina.org 总结报告
2007-12-31 00:31 vmware gsx server service
2007-12-31 00:15 squid 对 404 302 缓存的相关问题
2007-12-30 14:24 升级到 MovableType 3.3x 并修改 entry_basename 兼容性
2007-12-30 13:52 [php] realip judge 前面补0的ip格式剔除
2007-12-14 16:34 rm -rf * 系统管理员要排查的定时炸弹
2007-12-13 19:03 山西的宽带运营商太过分了 私自窜改dns解析
2007-12-13 16:35 F5 MIB 再学习 唯一性标记用地址的小bug
2007-12-11 22:15 perl 用Spreadsheet::WriteExcel写了个处理/读写excel的小程序
2007-12-11 13:39 perl 变量转义的问题