内存泄漏可能不严重,甚至能够被常规的手段检测出来。在现代 *** 作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。
在以下情况,内存泄漏导致较严重的后果:
* 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后拦笑如很多年内都置之不理)
* 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时
* 程序能够请求未被释放的内存(比如共享内存),简启甚至是在程序终止的时候
* 泄漏在 *** 作系统内部发生升慎
* 泄漏在系统关键驱动中发生
* 内存非常有限,比如在嵌入式系统或便携设备中
* 当运行于一个终止时内存并不自动释放的 *** 作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。
照你所描述的情况,更多的可能脊祥是由于软件的兼容性问题造成的内存泄露的问题。
因为池中被占用的内存量是不会在任务管理器里显示的。
你可以去网上下个支持win8.1的spoolmon.exe程序,打开后按B排序,然后,占用内存的就会按占用大小由高到低排序,你就可以清楚地知道是谁占了你的内存。
如上图茄橘,占用内存最多的是tag name 为 Leak
在cmd 命令行中键入 C:\>findstr /s Leak *.sys
就会返回所有相关的sys程序。
如果是硬件驱动程序,那就是显卡主板驱动问题居多,等待厂商更新。如果是软件驱动,不重要的,你就卸载了算了。
对了,如果返回的sys比较多
你可以用微软的驱动程序验证程序管理器来追踪
运行verifier实用程序,依次选择“创建自定义设置->(勾选)池追踪->自动选择所有驱动程序->完成”,之后会重启计算机。重新启动后,系统就会进行驱动程序追踪。再次发现内存泄漏之后,运行verifier,依次选择“显示当前经过验证的驱动程序信息->下一步->下一步->下一步,选择可能有问题的sys,看樱纳搏计数器非页面缓冲池的已分配的值,单位是BYTES,如果是已经发生泄露,那这个值会很大。
1.一般内存泄露都是在new和delete或malloc和free没有成对使用的情况下产生的。在代码量较少的情况下可自行检测。
确保两着成对使用。
2.c++中有智能指针的概念,sp和wp。
这也是内存管理,避免内存泄露的一个方法。盯返
不过这个概念相对难度大一些。
lz感兴趣可以上网搜关键字“C++智能指针”。
3.在一些大的软件工程中,一般在代码设计完成后,会使用一些代码检测工具对代码的运行进行跟踪。
这里就包括对内存泄露问题的检测,常用的工具有valgrind,它会在雹则简跟源裤着整个程序运行一遍后显示内存的使用和释放情况。
valgrind使用方法不难,lz可上网搜索相应教程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)