达内LOGO和达内网址http://www.hztarena.org/Html/soft/list/list_21.html达内总部培训项目:Java培训 3G培训 Android培训 软件测试培训达内总部400服务电话
达内首页>>软件培训>>C++如何检查内存泄露
C++如何检查内存泄露
作者:杭州达内 更新时间:2015-4-3 11:01:44 来源:杭州达内IT培训好不好 网址:http://www.hztarena.org

C++如何检查内存泄露

 

在Linux平台上 有valgrind可以非常方便的帮助我们定位内存泄漏,因为它的开源属*和开发领域的跑服务器特点,处理问题相对容易。而在Windows平台,服务器和客户端开发人员惯用的调试方法就大不一样了。达内C++编程专家结合经验,提出以下几点检查C++内存泄露的方法:

对象计数

方法:在对象构造时计数++,析构时–,每隔一段时间打印对象的数量

优点:无*能开销,不占用额外内存。定位结果精确。

缺点:侵入式方法,需修改现有代*,对于脚本泄露等无法修改代*的情况就无法定位了

Hook Windows系统API

方法:使用微软的detours库,hook分配内存的系统Api:HeapAlloc/HeapRealloc/HeapFree ,记录分配点,定期打印。

优点:非侵入式方法,无需修改现有文件,检查全面,对第三方库、脚本库等等都能统计到。

缺点:记录内存需要占用大量内存,而且多线程环境需要加锁。

使用DiagLeak检测

微软出品的内存泄漏分析工具,原理同hookapi方式。配合LDGraph可视化展示内存分配数据,更方便查找泄漏。

优点:非侵入式修改,无需做任何代*改动。跟踪全面。可视化分析堆栈一览无余!

缺点:对*能有影响,hook分配加锁,遍历堆栈。

总结:建议根据不同情况选择不同的方案

线上生产环境,大对象用计数来判断;在对外测试阶段,则使用LeakDiag辅助分析;线上大规模应用阶段,运用HookApi的方法



上一篇:C++学习书单推荐
下一篇:C语言为何值得学习?

分享到: 更多


相关资讯

  • C语言罕为人知的特性有哪些
  • C#程序员常用的10个代码片段
  • C、C++指针引用有何差异
  • java比C++速度快有哪些情况
  • C语言为何值得学习?
  • C++如何检查内存泄露
  • C++学习书单推荐
  • 什么是变量?C++变量简介
  • 15款C/C++程序员必备的编译...
  • C语言条件编译详解
  • 【每周一】
    C++ 国际软件工程师就业班
    >>热招中!


    【每周一】
    国际软件测试 工程师就业班
    >>热招中!


    【每周一】
    C++国际软件 工程师周末班 >>热招中!

    【每周一】
    国际软件测试 工程师周末班
    >>热招中!