日期:2014-05-16  浏览次数:21669 次

valgrind提示 still reachable 具体有哪些情况?算不算泄漏?
大家好,我在linux上开发的一个程序,涉及到数据库读写,有时可能有大数据量操作,在使用valgrind进行检测内存泄漏时,只有一些still reachable的空间,之前查阅valgrind的网站说这种大多数情况是正常的。然后我就认为没有泄漏,在实际使用的时候发现一开始运行,程序占用1.1M左右的空间(使用top命令查看),运行一些比较少的数据读写时也偶尔发生一点变化,但总体维持在总内存的0.4%左右,我的内存是256M的。但当我操作40万条记录时,当然占的空间比较大,当全部记录写入完毕后,我认为应该恢复到0.4%的水平,而实际却是在2.2%左右,占了5.4M的空间,且一直都这么多,我经过了一个晚上后再次查看,还是2.2%。但我再次写入40万条记录后,并不会继续增长,还是维持在2.2%上。
请教一下高手,valgrind所说的still reachable的空间指的是什么情况下,仍然可以访问?会不会算泄漏?
对于我的这个程序来说,是不是内存泄漏了呢?
谢谢!

------解决方案--------------------
应该说不是memory leak。
一些商业库都会分配自己的工作数据区,频繁调用时可能会多分配一些,而且不一定释放,但有限额。
程序7x24小时运行时,内存稳定到一定的大小,不算内存泄露。
建议使用更好的商业软件,如parasoft insure++或ibm rational purifyplus。花钱在这些软件上,值。
------解决方案--------------------
still reachable 指的是内存指针还在 还有机会使用或者释放

如果你后面的程序不用或者不释放也会泄漏 valgrind在当时还不知道以后会不会泄漏
------解决方案--------------------
多数情况不是问题,比如程序是一个服务,一直运行一个while循环,而new出来的对象如果只能在析构delete,那么对象就永远不会被释放,valgrind就会报这样的问题