proxy代理   soft软件   IT 业界特快   norton 诺顿病毒库   代理列表   search FTP搜索   whois IP地理位置   blog 追求完美  
money理财   life生活   RSS聚合门户   firefox WEB浏览器   免费域名   typeset 假古文   AntiVirus 反病毒   ipcn 站点导航  

« RSA SecurID 双因素认证(Two-Factor Authentication) (导言) | Main | 用 php 写 script 管理脚本 »

December 24, 2005

从内存泄漏(Memory Leak)提到内存管理

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
https://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】动态内存的申请与释放必须配对,防止内存泄漏。
本blog WWW

Posted by windtear at December 24, 2005 5:28 PM

本站使用中的任何问题,请与 windtear @ windtear.net 联系
Copyright© 1999-2024 Windtear. All rights reserved.