繁体   English   中英

解决 C++ 程序 memory 使用问题

[英]Troubleshoot C++ program memory usage issue

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

In Java, I know tools like Eclipse Memory Analyzer ( https://www.eclipse.org/mat/ ) which could take a heap dump and show/visualize such memory usage, and I wonder if this can be done for a C++ program . 例如,我希望使用一种工具/方法让我知道特定的vector<shared_ptr<MyObject>>持有 memory 的 30%。

笔记:

  • 我主要在 macOS 上开发程序(使用 Apple Clang 编译),所以如果该方法适用于 macOS 会更好。 但我也确实部署到 Linux(使用 gcc 编译),所以 Linux 上的方法/工具没问题。
  • 为此,我尝试使用 Apple 的Intruments ,但到目前为止,我只能用它来查找 memory 分配问题。 我不知道如何计算程序在特定时刻的 memory 消耗(memory 消耗应该与程序中的 C++ 对象相关,以便我可以采取一些措施来相应地减少它)。

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

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

在此处输入图像描述

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

在此处输入图像描述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM