【问题标题】:How to find memory consumption of VC++/MFC-App如何查找 VC++/MFC-App 的内存消耗
【发布时间】:2019-11-13 10:20:50
【问题描述】:

我正在这个环境中开发一个应用程序:Windows、Native、32 位、使用 Visual Studio C++ 和 MFC、几个 Com-Dlls、ActiveX-Controls、库构建。 当我的应用程序运行时,我在 Windows-Taskmanager 中看到它缓慢但不断地消耗内存(大约每分钟 10Kb 或每 10 个“工作周期”我的应用程序大约 1K),我需要弄清楚这种消耗发生在哪里。

背景资料:

  • 应用程序有两种状态:空闲和工作。内存消耗仅发生在不断处理数据的工作状态
  • 在工作状态下,应用没有用户输入或任何其他外部请求
  • 我很确定动态分配的内存(新的,malloc)没有问题,因为我已经使用 MemPro(https://puredevsoftware.com/mempro)等工具检查了它,并且当我结束时调试器中没有报告内存泄漏程序
  • 所以我认为要么有一些类成员(列表、映射、数组...)正在增长(但不应该),要么内存消耗发生在外部组件中

所以我的问题是:

  • 你知道任何可以跟踪内存使用的工具
  • 我使用 Windows-Taskmanager 和 Sysinternals-Process-Explorer,但两者都以 KBytes 显示我的内存。有没有办法/工具以字节为单位查看它,以便我可以更快地看到变化?
  • 如何在代码中获取我的应用程序的当前内存使用情况(我猜是一些 windows-Api-call),以便我可以通过 Debug-Outputs 解决问题
  • 还有其他提示吗?

【问题讨论】:

  • 尽管 mempro 没有发现泄漏,但我仍然相信您需要一个可以比较内存快照的分析器(不确定 mempro,但 Deleaker 可以做到这一点)。因此,您可以查看差异以了解不断分配内存的位置。

标签: debugging visual-c++ memory-leaks mfc out-of-memory


【解决方案1】:

您可以随时使用_CrtMemCheckpoint() 制作您的内存快照,然后您可以使用_CrtMemDifference() 比较两个快照。 详情请见https://docs.microsoft.com/en-us/visualstudio/debugger/finding-memory-leaks-using-the-crt-library?view=vs-2019

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 2014-09-25
    • 2017-02-16
    • 2013-08-21
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多