当前位置: 首页 > news >正文

[VS] 诊断工具,检测内存泄漏,进行内存调优

工具:vs2019
系统:win10
语言:C++
github 调试 demo:  dangwei-90/ProcessOptimize (github.com)

本文主要通过 VS 自带的诊断工具,对程序进行 memory 内存调优。

Begin

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. 分析结束

    大家可以通过该方法,对自己的程序,检测内存泄漏,进行内存调优。

转自:[VS] 诊断工具,检测内存泄漏,进行内存调优_池塘码农的博客-CSDN博客_vs诊断工具

相关文章:

  • Visual C++ 内存泄漏检测工具(VLD)
  • 堆溢出崩溃分析Critical error detected c0000374
  • C++中内存泄漏,内存溢出区别及检查方法
  • [win10] ffmpeg gpu加速
  • Qt/null 空指针的一些操作规则
  • FFmpeg H264编码
  • 图像锐化是什么
  • FFmpeg原始帧处理-滤镜API用法详解
  • ffmpeg中的rtbufsize
  • 智能指针的实现
  • 什么是构造函数和析构函数?
  • CD-ROM
  • 光盘文件格式-udf、iso9660、Joliet、Romeo
  • 刻录光盘的程序步骤
  • ISO文件
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Flannel解读
  • JavaScript HTML DOM
  • javascript 总结(常用工具类的封装)
  • leetcode386. Lexicographical Numbers
  • Mybatis初体验
  • node 版本过低
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于 Babel 的 npm 包最小化设置
  • 码农张的Bug人生 - 见面之礼
  • 深入浅出webpack学习(1)--核心概念
  • 小程序 setData 学问多
  • 一道闭包题引发的思考
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 国内开源镜像站点
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #pragma data_seg 共享数据区(转)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (pojstep1.1.2)2654(直叙式模拟)
  • (补)B+树一些思想
  • (二)fiber的基本认识
  • (二)Linux——Linux常用指令
  • (二)linux使用docker容器运行mysql
  • (二)斐波那契Fabonacci函数
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (力扣)循环队列的实现与详解(C语言)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转) Android中ViewStub组件使用
  • (转)IOS中获取各种文件的目录路径的方法
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • ./configure,make,make install的作用
  • .bashrc在哪里,alias妙用
  • .net mvc 获取url中controller和action
  • .NET 使用配置文件
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • /etc/skel 目录作用