linux中使用valgrind检测内存泄露

简介:

众所周知,c或者c++编写的程序很容易出现内存泄露问题。valgrind是一个很好的工具,可以检测程序中的内存泄露问题。
什么是内存泄露
内存泄露可以分为两种:
一种是,程序中有指针指向通过malloc或者new申请的内存,但是在程序结束前,一直未收回。如果这种内存一直增加的话,可能导致内存耗尽。不过程序结束后系统会自动回收这些内存。
另一种是,通过malloc或者new申请的内存,但是程序中已经没有指针指向申请的内存。程序一直在执行,泄露的内存会越来越多,可能会耗尽程序的堆内存。

如何使用valgrind检测内存泄露
valgrind的使用方式很简单,使用的格式如下:
valgrind 参数 要检测的程序
示例:


$valgrind --leak-check=full ./test

输出结果中有如下字样:


LEAK SUMMARY:
 ==5578== definitely lost: 0 bytes in 0 blocks
 ==5578== indirectly lost: 0 bytes in 0 blocks
 ==5578== possibly lost: 53,201 bytes in 15 blocks
 ==5578== still reachable: 34,002 bytes in 30 blocks
 ==5578== suppressed: 0 bytes in 0 blocks 

valgrind命令的更多参数可以通过以下命令查看


$valgrind -h

不同内存泄露情况在valgrind中的表现
对于上述的第一种内存泄露的情况,在valgrind的报告中会表示为“still reachable”。
对于第二种情况的内存泄露,在valgrind的报告中会表示为"Directly lost和Indirectly lost"
另外对于valgrind报告中的“possibly lost”,是因为指针没有指向到申请堆的开始。如,c++的string有内存池的概念。如果程序中使用了string,且非正常退出(如使用ctrl+c快捷键终止程序),会报“possibly lost”

关于使用valgrind检测内存泄露更详尽的文档 http://valgrind.org/docs/manual/mc-manual.html#mc-manual.leaks


目录
相关文章
|
10天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
32 6
|
12天前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
19天前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
129 9
|
19天前
|
监控 JavaScript 前端开发
如何检测和解决 JavaScript 中内存泄漏问题
【10月更文挑战第25天】解决内存泄漏问题需要对代码有深入的理解和细致的排查。同时,不断优化和改进代码的结构和逻辑也是预防内存泄漏的重要措施。
34 6
|
18天前
|
存储 缓存 监控
|
22天前
|
Web App开发 缓存 JavaScript
如何检测和解决闭包引起的内存泄露
闭包引起的内存泄露是JavaScript开发中常见的问题。本文介绍了闭包导致内存泄露的原因,以及如何通过工具检测和代码优化来解决这些问题。
|
1月前
|
存储 缓存 监控
Linux中内存和性能问题
【10月更文挑战第5天】
38 4
|
1月前
|
算法 Linux
Linux中内存问题
【10月更文挑战第6天】
41 2
|
1月前
|
Web App开发 开发者
|
15天前
|
缓存 算法 Linux
Linux内核中的内存管理机制深度剖析####
【10月更文挑战第28天】 本文深入探讨了Linux操作系统的心脏——内核,聚焦其内存管理机制的奥秘。不同于传统摘要的概述方式,本文将以一次虚拟的内存分配请求为引子,逐步揭开Linux如何高效、安全地管理着从微小嵌入式设备到庞大数据中心数以千计程序的内存需求。通过这段旅程,读者将直观感受到Linux内存管理的精妙设计与强大能力,以及它是如何在复杂多变的环境中保持系统稳定与性能优化的。 ####
24 0