首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

内存储器申请完,释放后,虚拟内存,PF使用率不降

2012-10-05 
内存申请完,释放后,虚拟内存,PF使用率不降。如题,在程序中有多次申请内存的地方,都有做相应的释放。但是释放

内存申请完,释放后,虚拟内存,PF使用率不降。
如题,在程序中有多次申请内存的地方,都有做相应的释放。但是释放后,任务管理器中的“虚拟内存大小”并没有减少,在性能中的"PF使用率"也没有降。
最后在某处malloc申请失败。
我申请和释放的操作都在一个线程中进行的。
因为代码的调用关系比较复杂,不能贴出代码。

[解决办法]
还是有些申请的地方没有释放吧。你可以用检测内存泄露的工具测试下,网上很多,把源代码加到你的工程里就能检测了。
[解决办法]
还有注意malloc和free配对,new/new[]和delete/delete[]配对
[解决办法]
malloc 失败,每次是固定的位置,还是随机的呢?
[解决办法]
malloc分配内存顺序是这样的:
在c运行库内部保有的内存池中寻找一块足够的内存
(如果失败)调用VirtualAlloc分配内存
再次在c运行库内部保有的内存池中寻找一块足够的内存


free:
将用户释放的内存划入c运行库内部保有的内存池
如果内部保有的内存池空间过大,则调用VirtualFree释放内存


所以free函数释放的内存不会马上还给系统

有些dll使用了静态链接的c运行库,这些dll分配的内存在外部释放会出现错误,因为每个c运行库都有一个内部保有的内存池。

但是很多dll都使用了静态链接的c运行库,导致几乎每个进程内部都存在数个c运行库,所以,释放内存必须使用这些dll所提供的释放内存函数
[解决办法]

探讨
如题,在程序中有多次申请内存的地方,都有做相应的释放。但是释放后,任务管理器中的“虚拟内存大小”并没有减少,在性能中的"PF使用率"也没有降。
最后在某处malloc申请失败。
我申请和释放的操作都在一个线程中进行的。
因为代码的调用关系比较复杂,不能贴出代码。

[解决办法]
探讨

引用:
还有注意malloc和free配对,new/new[]和delete/delete[]配对

呵呵,虽然是改别人的工程,但已尽量把原先的配对。至于说的用内存检测工具。我已经使用多个工具至今我效果。

[解决办法]
malloc是你自己调用的,
如果是, 换换new

你可以尝试所有的内存一次性申请,。。。最后一个delete(free)搞定,只不过原来的若干New要合并
[解决办法]
缓冲区溢出也有可能导致malloc失败,不一定就是分配-释放方面的问题。检查的范围可能需要扩大。
[解决办法]
不能跟踪到malloc内部的调用看看么,brk,sbrk,或者mmap那一级的调用。

热点排行