内存申请完,释放后,虚拟内存,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所提供的释放内存函数
[解决办法]