【发布时间】:2010-11-12 20:19:34
【问题描述】:
我正在寻找一个运行时内存调试器,它能够在 Linux 上显示每个函数或 C++ 代码行的内存使用情况(不仅仅是泄漏)。 我正在尝试追踪程序内存使用量的峰值。 我用过 Valgrind 和 Purify,我发现没有泄漏。我预计,在那个峰值之后,内存使用量会恢复到我的程序的预期水平。
谢谢。
【问题讨论】:
标签: c++ c linux memory-management dynamic-memory-allocation
我正在寻找一个运行时内存调试器,它能够在 Linux 上显示每个函数或 C++ 代码行的内存使用情况(不仅仅是泄漏)。 我正在尝试追踪程序内存使用量的峰值。 我用过 Valgrind 和 Purify,我发现没有泄漏。我预计,在那个峰值之后,内存使用量会恢复到我的程序的预期水平。
谢谢。
【问题讨论】:
标签: c++ c linux memory-management dynamic-memory-allocation
您可以使用 valgrind 工具包中的 massif 工具。
【讨论】:
Memory usage analysis 中的“应用程序内存分析”部分给出了很好的概述并指出:
【讨论】:
我过去曾多次使用 valgrind,但如果您想了解峰值发生的位置,我会使用以下 hack:
1) 测量尖峰的大小(假设 SPIKE = 1Gb)
2)(假设您的总内存为 4Gb)运行一个不同的自定义进程,该进程将准确分配 3Gb + 1 个字节,然后等到您按下一个键。把它搁置
3) 运行您的应用程序代码并查看您的内存分配将失败的位置。由于你的可用内存现在比你的 SPIKE 略少,当峰值发生时,它将无法分配请求的内存
希望对你有帮助
【讨论】:
获取函数代码大小用法:
nm --demangle --print-size --size-sort --reverse-sort <your exec built with -g>
【讨论】: