首页 > 解决方案 > 解决 C++ 程序内存使用问题

问题描述

我正在编写一个 C++ 程序,发现它消耗了太多内存。我想知道程序的哪个部分消耗的内存最多,理想情况下,我想知道程序在特定时刻使用哪种 C++ 对象消耗了多少内存。

在 Java 中,我知道像 Eclipse Memory Analyzer ( https://www.eclipse.org/mat/ ) 这样的工具可以进行堆转储并显示/可视化这种内存使用情况,我想知道这是否可以用于 C++ 程序. 例如,我希望使用一种工具/方法让我知道某个特定vector<shared_ptr<MyObject>>对象占用了 30% 的内存。

笔记:

标签: c++memory-managementinstruments

解决方案


我还没有找到一种简单的方法来可视化/总结程序内存的每个部分。到目前为止,我发现的最好的工具/方法是 Apple 的 Instruments(如果您使用的是 macOS)。

通过使用 Instruments,您可以使用Allocations分析模板。使用此分析模板时,您可以选择File==> Recording Options==> 检查Discard events for freed memory选项

在此处输入图像描述

并且您将能够在分配记录期间找出未释放的内存(也就是仍在内存中的数据)。如果您加载了程序的调试符号,您可以查看导致此结果的函数。

在此处输入图像描述

虽然这并不能解决所有问题,但它确实有助于识别部分问题。


推荐阅读