跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

C++ Linux 环境下内存泄漏检测方式

C++ Linux 环境下内存泄漏检测常用工具包括 Valgrind、Heaptrack 和 gperftools。Valgrind 适合开发阶段检查内存泄漏及越界访问,支持 XML 输出便于自动化分析。Heaptrack 提供火焰图可视化堆内存分配,适用于生产环境跟踪。gperftools 包含 tcmalloc 和 heap profiler,适用于高并发大型系统的内存优化。开发者应根据场景选择合适的工具及早发现并解决内存问题。

字节跳动发布于 2026/2/22更新于 2026/9/1066 浏览
C++ Linux 环境下内存泄漏检测方式

在 C++ 开发中,内存管理是至关重要的,尤其是当程序处理大数据或长时间运行时,内存泄漏或不当使用可能导致性能下降或崩溃。下面介绍几种常见且有效的内存泄漏检测方法。

1. Valgrind

Valgrind 是一个广泛使用的内存调试和性能分析工具,它的 Memcheck 工具可以帮助你检查程序中的内存泄漏、内存越界、未初始化内存使用等问题。

特点

  • 检测内存泄漏。
  • 检查内存越界。
  • 找到未初始化的内存读取。
  • 跟踪内存分配和释放的操作。

如何使用

安装 Valgrind
sudo apt install valgrind
运行程序
valgrind --leak-check=full ./your_program
查看内存泄漏报告

Valgrind 会显示每个内存泄漏的位置和大小。若需进一步分析,可使用以下命令导出 XML 格式:

valgrind --tool=memcheck \
  --leak-check=full \
  --show-leak-kinds=all \
  --track-origins=yes \
  --num-callers=50 \
  --xml=yes \
  --xml-file=valgrind.xml \
  ./your_program

这些参数可以追踪未初始化内存的来源、输出完整堆栈、显示所有泄漏类别(definite、indirect、possible)。

官方网站:Valgrind

2. Heaptrack

Heaptrack 是一个内存泄漏跟踪工具,它能够跟踪程序中所有的堆内存分配,并且帮助你定位内存泄漏问题。它记录了每次分配和释放堆内存的位置,最后生成一个火焰图,帮助分析。

特点

  • 详细跟踪每个堆内存分配。
  • 提供火焰图,可视化内存泄漏的来源。
  • 在生产环境下也可以使用。

如何使用

安装 Heaptrack
sudo apt install heaptrack
运行程序并生成报告
heaptrack ./your_program
使用 heaptrack_gui 分析内存泄漏

打开生成的报告文件进行分析。或者也可导出为文本类型:

heaptrack_print "/home/xxx/Desktop/xxx/build/heaptrack.xxx.xxx.zst" > heaptrack.txt 2>&1

官方网站:Heaptrack

3. gperftools (google-perftools)

gperftools 是由 Google 提供的一套性能工具,包含 tcmalloc(高效内存分配器)和 heap profiler(堆分析器)。gperftools 提供了强大的内存分析功能,尤其适用于长期运行的大型系统。

特点

  • tcmalloc:替代标准库的 malloc,提高内存分配效率。
  • heap profiler:监控程序的堆内存使用情况,跟踪内存分配和释放。
  • cpu profiler:分析 CPU 使用情况。

如何使用

安装 gperftools
sudo apt install google-perftools
在代码中使用 tcmalloc
#include <gperftools/tcmalloc.h>
启用堆内存分析
CPUPROFILE=your_program.prof ./your_program
使用工具查看分析报告
pprof --text ./your_program your_program.prof

官方网站:gperftools

附加推荐:gprof2dot

什么是 gprof2dot?

这是一个用于将许多探查器的输出转换为点图的 Python 脚本。

依赖

  • Python: known to work with version 2.7 and 3.3; it will most likely not work with earlier releases.
  • Graphviz: tested with version 2.26.3, but should work fine with other versions.

如何使用

安装
sudo apt install python3 graphviz
pip install gprof2dot

将 gprof2dot.py 添加到 $PATH 路径下的任一文件夹下,例如 /usr/bin,这样就可以直接在终端下执行 gprof2dot.py 了。

使用

来到你的可执行程序目录下,执行:

valgrind --tool=callgrind ./your_program

执行完毕后你会看到一个 callgrind.out.xxx 文件。再执行:

gprof2dot.py -f callgrind callgrind.out.XXX | dot -Tpng -o report.png

来生成图形化结果。它生成的结果非常详细,甚至连函数入口及库函数调用都标识出来了。每个节点中有四个元素,分别是:

  1. 函数名
  2. 该函数及其所有子函数(被它调用的函数)占总程序运行时间的百分比
  3. 该函数自身(不包括其子函数)占总程序运行时间的百分比
  4. 该函数在程序运行期间被调用的总次数

总结

不同的内存监控工具适用于不同的场景。以下是一些推荐的工具:

  • Valgrind:适用于内存泄漏和越界访问的调试,常用于开发阶段。
  • Heaptrack:适用于内存泄漏分析,并且提供可视化分析工具。
  • gperftools:适用于高并发、大型系统中的内存优化,尤其是在生产环境下。

可以根据自己的开发环境和喜好选择合适的工具,在开发过程中及早发现并解决内存相关问题。

目录

  1. 1. Valgrind
  2. 特点
  3. 如何使用
  4. 安装 Valgrind
  5. 运行程序
  6. 查看内存泄漏报告
  7. 2. Heaptrack
  8. 特点
  9. 如何使用
  10. 安装 Heaptrack
  11. 运行程序并生成报告
  12. 使用 heaptrack_gui 分析内存泄漏
  13. 3. gperftools (google-perftools)
  14. 特点
  15. 如何使用
  16. 安装 gperftools
  17. 在代码中使用 tcmalloc
  18. 启用堆内存分析
  19. 使用工具查看分析报告
  20. 附加推荐:gprof2dot
  21. 什么是 gprof2dot?
  22. 依赖
  23. 如何使用
  24. 安装
  25. 使用
  26. 总结

更多推荐文章

查看全部
  • llama.cpp 多 GPU 分布式计算优化实践指南
  • LLM 常见归一化方法解析:LayerNorm、RMSNorm 与 DeepNorm
  • 微搭低代码:手机号登录与RBAC路由控制
  • C++ 多态详解:概念、语法与底层实现
  • RAGFlow Python API 中文文档
  • Python 文件操作深度解析与避坑指南
  • VSCode Copilot 配置文件提示警告分析与解决
  • 清华团队发布 OpenClaw 研究报告:AI 智能体生态闭环解析
  • Python 学习过程中的核心难点与分阶段突破指南
  • Ubuntu 20.04 系统下 QGroundControl 地面站安装教程
  • 浏览器缓存机制详解与前端代码更新缓存解决方案
  • A* 搜索算法是什么?
  • Neo4j 从入门到实战:K8s 集群部署与 Cypher 查询
  • Java OCR 工具 RapidOCR 集成指南:从环境配置到实战应用
  • 微信开放官方 Bot API:ClawBot 插件与 iLink 协议深度解析
  • 企业微信群机器人发送 Markdown 消息支持表格及艾特功能
  • 如何成为真正懂 AI 的产品经理
  • GitHub Copilot 学生认证指南
  • Cursor Visual Editor 评测:Web 开发如何回归所见即所得
  • Java Swing 网格布局 GridLayout 基础用法

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online