错误调用CreateToolhelp32Snapshot导致内核内存泄露
来源:互联网 发布:mac装win7升级安装 编辑:程序博客网 时间:2024/05/17 12:51
前段时间写了一个驱动层程序,做好了驱动层,写了与其交互的用户层,结果运行时发现内存泄露严重,运行一段时间后,windows开始提示虚拟内存过低,观察任务管理器当中的PF值,发现它在疯狂增长。于是开始分析问题所在:
1.通过任务管理器,发现用户层的程序内存和虚拟内存使用都非常稳定,排除它泄露内存的可能。
2.驱动层程序查找所有动态分配内存的地方,都找到了相应的释放函数。也排除了驱动层泄露的可能。
3.不放心驱动层,在所有分配的释放的地方都打印日志。观察发现还是正常的。
经过上面分析,发现都被排除了。但PF值在增加是个事实。后来找到了PoolMon工具(可以微软网站上下载到),用它来观察,发现有个TAG确实分析了内存没有释放。
后来决定采用注释部分功能的方式来测试问题所在。几轮下来,驱动层只剩框架了,还有泄露。开始尝试用户态程序(看来看任务管理器的方法不太靠谱)。
一轮一轮的注释,终于发现 调用CreateToolhelp32Snapshot之后,没有调用CloseHandle关闭句柄。用户层调用竟然会产生内核内存泄露,教训啊,以后一定要记住关Handle
- 错误调用CreateToolhelp32Snapshot导致内核内存泄露
- WINCE下CreateToolhelp32Snapshot内存泄露问题
- 内核中accept连接时创建socket结构错误导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- performSelector延时调用导致的内存泄露
- PerformSelector延时调用导致的内存泄露
- 循环引用导致内存泄露 dealloc无法调用
- VC:快速侦测断言错误导致的内存泄露
- AfxEndThread导致内存泄露
- inet_ntoa导致内存泄露
- CollectionView导致内存泄露?
- SQL游标的使用
- 关于Infoq就Spring Integration2.0发布采访其创始人Mark Fisher
- Tuxedo 中间件学习心得 一
- 用户 'NT AUTHORITY/NETWORK SERVICE' 登录失败
- GTK Gossip: GtkSpinButton
- 错误调用CreateToolhelp32Snapshot导致内核内存泄露
- GTK Gossip: GtkTextView
- 从气血看健康
- 无奈
- GTK Gossip: GtkComboBox
- 写的很烂的DFS,POJ1979
- 经验总结:css的一些书写技巧
- 一个不错的web UI菜单设计
- 未来