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


目录
相关文章
|
1月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
134 6
|
28天前
|
C语言 Android开发 C++
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
本文介绍了使用MTuner软件进行Qt MinGW编译程序的内存泄漏检测的方法,提供了MTuner的下载链接和测试代码示例,并通过将Debug程序拖入MTuner来定位内存泄漏问题。
基于MTuner软件进行qt的mingw编译程序的内存泄漏检测
|
10天前
|
存储 缓存 监控
Linux中内存和性能问题
【10月更文挑战第5天】
26 4
|
9天前
|
算法 Linux
Linux中内存问题
【10月更文挑战第6天】
11 2
|
9天前
|
Web App开发 开发者
|
10天前
|
存储 缓存 固态存储
|
26天前
|
设计模式 Java Android开发
安卓应用开发中的内存泄漏检测与修复
【9月更文挑战第30天】在安卓应用开发过程中,内存泄漏是一个常见而又棘手的问题。它不仅会导致应用运行缓慢,还可能引发应用崩溃,严重影响用户体验。本文将深入探讨如何检测和修复内存泄漏,以提升应用性能和稳定性。我们将通过一个具体的代码示例,展示如何使用Android Studio的Memory Profiler工具来定位内存泄漏,并介绍几种常见的内存泄漏场景及其解决方案。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的技巧和方法,帮助你打造更优质的安卓应用。
|
10天前
|
数据处理 Python
Python读取大文件的“坑“与内存占用检测
Python读取大文件的“坑“与内存占用检测
25 0
|
13天前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
31 0
|
18天前
|
存储 算法 C语言
MacOS环境-手写操作系统-15-内核管理 检测可用内存
MacOS环境-手写操作系统-15-内核管理 检测可用内存
27 0