【问题标题】:Why does my project/VS/Task Manager all show different memory usage? C++为什么我的项目/VS/任务管理器都显示不同的内存使用情况? C++
【发布时间】:2021-04-30 17:52:27
【问题描述】:

我和一个小团队一直在做一个开始占用大量内存的项目(对于一个国内程序)。我们使用的是 C++20,据我所知,在项目中除了智能指针之外没有使用任何东西。

我们认为我们在某个地方存在内存泄漏,但发现很难追踪,而且我们对从不同来源获得的各种诊断结果也感到非常困惑。以下所有三个案例都是在同一时间拍摄的。 (在 Windows 10、x64 上拍摄)

  1. 以下是我们的游戏内分析器。我们正在使用:
PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc));

如您所见,它报告了大约 760 MB 的内存使用情况。

  1. 以下是 VS2019 向我们展示的内容(同样,在同一时间)。 ~1.5GB 的“私有字节”,但堆上也只有 ~44KB? (我们的整个应用程序是通过 main 函数中的智能指针运行的,所以它应该都在堆中,对吧?)。

  1. 最后,任务管理器在下面。这是内存使用情况,大致是我们在游戏中报告的,但总是略低。

在我看来,所有这些都有些冲突,我完全被 VS 的输出弄糊涂了。任何关于 VS 输出的解释将不胜感激。

【问题讨论】:

  • 一般来说:每个进程大概有8种内存,其中一些是与其他应用共享的。每个工具都会报告此内存的不同子集,并且一些工具将仅显示共享内存的“您的份额”。我推测 VS 显示“当前在 RAM 中使用的堆”,而其他工具显示“总堆,甚至磁盘上的部分”+“二进制,甚至磁盘上的部分”+“ dll,甚至磁盘上的部分”+“共享内存,甚至磁盘上的部分”+“gpu内存”+“堆栈内存”。
  • blog.mindorks.com/understanding-memory-usage-in-android 有一些关于这一切在 Android 中如何工作的好信息
  • 很好的资源,谢谢!

标签: c++ visual-studio memory


【解决方案1】:

看看这个:msdn page

任务管理器提供工作集(即您使用了多少内存)。

Visual Studio Profiler 显示用于存储且未共享的总虚拟内存。

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 2017-07-14
    • 2021-12-28
    • 2022-12-04
    • 2015-02-27
    • 2017-08-16
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多