当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 14 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : C++中的内存泄露问题
帖子发表于 : 2008-12-05 16:31 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
最近编程的过程中用到了好些的new和delete之类的分配内存并释放内存代码,有人给我指出这样要很注意内存的泄露,
我上网查了查:说一个小的内存泄露不需要太注意,但是大的内存泄露,或者渐增式的内存泄露,一定要引起注意,否则轻者会引起性能下降,再就是引起复杂的内存消耗错误,最坏的是。一个内存泄露程序可能用完了所有可用的内存,影响其他程序的运行。
针对这些我有几个问题;
1. 内存泄露是永久性的还是暂时性的,既是一个内存泄露它的影响,是影响一个程序的始终还是影响到物理内存,不管你啥时候这个内存泄露造成的“创伤”都是无法抹去的?
2.对于已经造成的内存泄露有没有补救的措施?
3.还有我的程序中动态分配的内存,在还没有来的及释放程序就意外终止了,这样是不是也要造成内存泄露啊?
4.linux下有个valgrind可以用来检测内存的利用以防止内存泄露的,它是用来防的不是用来治的吧?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-05 16:56 
头像

注册: 2008-08-26 22:57
帖子: 189
地址: 长沙
送出感谢: 0 次
接收感谢: 0 次
1、内存泄漏是表示运行中的进程使用了new,malloc在heap上分配了内存,但在内存使用完成后没有释放,而且没有指针再指向这块内存,这块内存在当前进程中永远无法再使用或释放。

2、内存泄漏只对一个运行中进程有效,如果进程运行结束,操作系统会把这个进程所有内存释放掉,当然也包括泄漏了的内存。

3、如果一个程序只运行很短的时间,有少量的内存泄漏没有关系,因为进程一结束,进程占用的所有的内存都释放掉了。如果是长期运行的程序,特别是服务器程序,绝不能有内存泄漏。

4、内存泄漏不一定只指内存没有释放,其实程序能申请的所有资源如socket、锁、文件句柄,数据库连接等如果没有合法释放,长期运行中都会有问题,而且泄漏这些资源很多都会表现为内存被大量占用。


_________________
i7 2630QM+ 4G ram + 500g hd + arch
11.04装新机器上死机,只好换arch了


页首
 用户资料  
 
3 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-05 17:09 
头像

注册: 2008-08-26 22:57
帖子: 189
地址: 长沙
送出感谢: 0 次
接收感谢: 0 次
c和c++中有很多工具可以检测内存的泄漏,主要原理是跟踪每一次分配内存调用和释放调用,如果在程序结束时“不对称”,就认为内存泄漏了。

如果已经内存泄漏了很难补救,因为已经没有办法访问到已经泄漏的内存,没有办法把泄漏内存的地址交给free()或delete进行释放。但也不是绝对没有办法。

所以写c或c++程序时要养成好习惯,另外可以使用智能指针来管理内存。


_________________
i7 2630QM+ 4G ram + 500g hd + arch
11.04装新机器上死机,只好换arch了


页首
 用户资料  
 
4 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-05 20:44 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
devin, 哦谢谢,非常谢谢
我对内存泄露有了更深入的认识,我知道了,在程序的编写过程中难免有内存泄露,
我写的恰是运行在服务器上的程序,在程序尚未真正运行在服务器上的时候,多调试并用,内存泄露工具多检测
对于存在内存泄露的地方第一时间进行改正,争取在真正使用时最小限度地减少内存泄露(因为我不敢保证修改后的程序没有一点泄露),是这个思路吧?
,最后你说到智能指针我得好好看看了,见过这东西但是没有好好研究过。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-05 22:13 

注册: 2008-03-30 10:35
帖子: 439
送出感谢: 1
接收感谢: 0 次
weihua2008 写道:
devin, 哦谢谢,非常谢谢
我对内存泄露有了更深入的认识,我知道了,在程序的编写过程中难免有内存泄露,
我写的恰是运行在服务器上的程序,在程序尚未真正运行在服务器上的时候,多调试并用,内存泄露工具多检测
对于存在内存泄露的地方第一时间进行改正,争取在真正使用时最小限度地减少内存泄露(因为我不敢保证修改后的程序没有一点泄露),是这个思路吧?
,最后你说到智能指针我得好好看看了,见过这东西但是没有好好研究过。


太自动的东西我都不放心,要是智能指针能够拯救cpp的话,那大家早就用了,这说明这个东西有问题。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-05 22:27 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
智能指针要拯救的不是cpp, 而是那些蹩脚的cpp程序员


_________________
目前负债150多万


页首
 用户资料  
 
7 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 1:14 

注册: 2008-03-30 10:35
帖子: 439
送出感谢: 1
接收感谢: 0 次
xhy 写道:
智能指针要拯救的不是cpp, 而是那些蹩脚的cpp程序员


cpp已经一天不如一天了,致命的缺陷,拯救不了。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 9:50 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
gong, xhy,
两位说的有点不乐观啊,既然你们说内存泄漏是c++的致命缺陷,
那这个内存泄漏是不是只存在一个进程中存在,当我结束这个进程的时候,是不是就内存泄漏(即没有释放的内存)就消失了?


页首
 用户资料  
 
9 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 10:50 

注册: 2008-03-30 10:35
帖子: 439
送出感谢: 1
接收感谢: 0 次
weihua2008 写道:
gong, xhy,
两位说的有点不乐观啊,既然你们说内存泄漏是c++的致命缺陷,
那这个内存泄漏是不是只存在一个进程中存在,当我结束这个进程的时候,是不是就内存泄漏(即没有释放的内存)就消失了?


一般成熟的操作系统会收回的,但是这样的程序不利于长期运行。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 11:36 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
我知道的,还是那句话,我在程序测试的时候检测防止内存泄漏,但是在运行的时候难免程序意外中止,这个时候,是不是也算进程结束,此前的内存泄漏就会释放掉,你的意思是说一个存在内存泄漏的程序,不易于不间断的长期运行,是吧?


页首
 用户资料  
 
11 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 11:44 

注册: 2008-03-30 10:35
帖子: 439
送出感谢: 1
接收感谢: 0 次
是,操作系统负责管理这方面的内存收发。
是,比如作server。你看firefox的内存泄漏就很严重,但是不是拿来长期运行的,所以泄漏一下也不碍事,只是作为一个好程序应该杜绝这样的现象。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 14:03 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
gong 写道:
weihua2008 写道:
devin, 哦谢谢,非常谢谢
我对内存泄露有了更深入的认识,我知道了,在程序的编写过程中难免有内存泄露,
我写的恰是运行在服务器上的程序,在程序尚未真正运行在服务器上的时候,多调试并用,内存泄露工具多检测
对于存在内存泄露的地方第一时间进行改正,争取在真正使用时最小限度地减少内存泄露(因为我不敢保证修改后的程序没有一点泄露),是这个思路吧?
,最后你说到智能指针我得好好看看了,见过这东西但是没有好好研究过。


太自动的东西我都不放心,要是智能指针能够拯救cpp的话,那大家早就用了,这说明这个东西有问题。


用 boost 里面的那个

引用某人的话

auto_ptr 是 brainfucker 。。


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 14:43 
头像

注册: 2005-12-28 1:16
帖子: 3916
地址: 火星
系统: Ubuntu 12.10 X64
送出感谢: 1
接收感谢: 0 次
gong 写道:
xhy 写道:
智能指针要拯救的不是cpp, 而是那些蹩脚的cpp程序员


cpp已经一天不如一天了,致命的缺陷,拯救不了。


是用户群体素质下降了

cpp最大的缺点是过于复杂和强大,不适合这个浮躁与功利的社会


_________________
目前负债150多万


页首
 用户资料  
 
14 楼 
 文章标题 : Re: C++中的内存泄露问题
帖子发表于 : 2008-12-06 17:59 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
什么时候我的C++功力达到那些写boost的人那样就好了。。


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 14 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译