赞
踩
本文主要通过 VS 自带的诊断工具,对程序进行 memory 内存调优。
1. 编译测试 demo
读者可以通过 dangwei-90/ProcessOptimize (github.com) 下载,也可以自己编写测试 demo. 通过一个 while 循环来造成内存泄漏。
- void CProcessOptimizeDlg::TestMemoryLeak()
- {
- while (!is_stop_) {
- int* arr = new int[200];
- std::cout << arr << std::endl;
- Sleep(100);
- }
- }
-
- void CProcessOptimizeDlg::OnBnClickedMemoryTest()
- {
- is_stop_ = false;
-
- std::thread memory_thread(&CProcessOptimizeDlg::TestMemoryLeak, this);
- memory_thread.detach();
- }
2. 通过 VS 诊断工具
先启动 debug 调试,然后按 CTRL+ALT+F2 ,开启诊断工具,如下图所示:
如果提示“已禁用使用快照分析....”,点启用即可。
3. 通过工具开始分析
程序运行一分钟后,点击 截取快照 。此时,可以通过工具,分析这一分钟内,内存增长的函数占比,然后分析内存泄漏的地方,对之进行优化。
如下图所示:
点击 查看堆,如下图所示:
点击该行,查看详细情况:
此处显示,TestMemoryLeak() 方法,每隔110毫秒左右,会新增 800 字节的内存泄漏。点击该方法,如下图所示:
标蓝的行,表示诊断工具定位到的内存新增的地方。可以发现,while 循环内,每隔100毫秒,会 new 200个 int,但并没有 delete,导致内存泄漏。
4. 分析结束
大家可以通过该方法,对自己的程序,检测内存泄漏,进行内存调优。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。