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


目录
相关文章
|
28天前
|
存储 算法 Linux
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
61 5
|
3天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
15天前
|
存储 缓存 监控
Linux内存和硬盘空间管理技巧
了解Linux内存和硬盘管理技巧,提升系统性能和稳定性。使用`free`, `top`, `vmstat`监控内存,通过`sync`, `echo 1 > /proc/sys/vm/drop_caches`清理缓存。利用Swap分区释放内存。借助`df`, `du`检查硬盘空间,清理无用文件,使用`clean-old`, `gzip`, `tar`压缩归档。查找大文件用`find`和`du`,确保
33 0
|
16天前
|
Prometheus 监控 Cloud Native
【Linux】查看系统内存命令(详细讲解)
【Linux】查看系统内存命令(详细讲解)
|
20天前
|
存储 缓存 监控
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
|
28天前
|
存储 缓存 监控
Linux 系统 内存通用指标以及查询方式
Linux 系统 内存通用指标以及查询方式
18 0
|
28天前
|
存储 Linux 程序员
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
72 0
|
28天前
|
存储 算法 Linux
深入理解Linux内存管理brk 和 sbrk 与以及使用C++ list实现内存分配器
深入理解Linux内存管理brk 和 sbrk 与以及使用C++ list实现内存分配器
34 0
|
30天前
|
缓存 Linux iOS开发
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
65 1
|
22小时前
|
Ubuntu Linux Shell
linux免交互登陆远程主机并执行命令(密钥对和Expect)
linux免交互登陆远程主机并执行命令(密钥对和Expect)