温馨提示×

怎样用ubuntu查c++内存

小樊
41
2026-10-14 04:54:01
栏目: 编程语言

在 Ubuntu 上排查 C++ 程序的内存问题(泄漏、越界、使用量等),常用方法和工具如下,按“从简单到专业”给你梳理。


一、先看内存占用(最基础)

1. top / htop

top
htop   # 推荐,需安装:sudo apt install htop
  • 看 RES(常驻内存)
  • 看 VIRT(虚拟内存)

适合:看程序吃多少内存。


2. /proc/<pid>/status

cat /proc/$(pidof your_program)/status

重点看:

  • VmRSS
  • VmSize

二、统计内存使用(代码级)

3. getrusage(C/C++ 自带)

#include <sys/resource.h>
#include <iostream>

int main() {
    struct rusage usage;
    getrusage(RUSAGE_SELF, &usage);
    std::cout << "Max RSS: " << usage.ru_maxrss << " KB\n";
}

三、查内存泄漏(重点)

4. Valgrind(最经典)

sudo apt install valgrind
valgrind --leak-check=full ./your_program

输出示例:

==1234== definitely lost: 100 bytes
==1234== indirectly lost: 0 bytes

✅ 优点:

  • 精确找泄漏
  • 不用改代码

❌ 缺点:

  • 很慢(10–50 倍)

5. AddressSanitizer(现代推荐)

编译时加:

g++ -fsanitize=address -g -O1 main.cpp -o main
./main

能检测:

  • 内存泄漏
  • 越界访问
  • use-after-free

✅ 比 Valgrind 快很多
✅ 适合开发阶段


四、堆内存分析(高级)

6. Heaptrack(可视化分析)

sudo apt install heaptrack
heaptrack ./your_program
heaptrack_gui heaptrack.your_program.*.gz

适合:

  • 看“哪段代码分配最多内存”
  • 找热点

7. massif(Valgrind 子工具)

valgrind --tool=massif ./your_program
ms_print massif.out.*

适合:

  • 看内存随时间变化
  • 找峰值

五、常见问题速查表

问题 工具
内存泄漏 Valgrind / ASan
越界访问 AddressSanitizer
内存占用高 htop / massif
谁分配最多 Heaptrack
实时内存 /proc/PID/status

六、推荐组合(实用)

✅ 开发阶段

AddressSanitizer + gdb

✅ 上线前检查

Valgrind

✅ 性能 & 内存分析

Heaptrack / massif

如果你愿意,可以告诉我:

  • 是 内存泄漏 还是 内存暴涨
  • 用 g++ / clang
  • 程序是 长期运行服务 还是 短时间程序

我可以给你更针对性的命令。

0 踩