【发布时间】:2021-04-30 17:52:27
【问题描述】:
我和一个小团队一直在做一个开始占用大量内存的项目(对于一个国内程序)。我们使用的是 C++20,据我所知,在项目中除了智能指针之外没有使用任何东西。
我们认为我们在某个地方存在内存泄漏,但发现很难追踪,而且我们对从不同来源获得的各种诊断结果也感到非常困惑。以下所有三个案例都是在同一时间拍摄的。 (在 Windows 10、x64 上拍摄)
- 以下是我们的游戏内分析器。我们正在使用:
PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc));
如您所见,它报告了大约 760 MB 的内存使用情况。
- 以下是 VS2019 向我们展示的内容(同样,在同一时间)。 ~1.5GB 的“私有字节”,但堆上也只有 ~44KB? (我们的整个应用程序是通过 main 函数中的智能指针运行的,所以它应该都在堆中,对吧?)。
- 最后,任务管理器在下面。这是内存使用情况,大致是我们在游戏中报告的,但总是略低。
在我看来,所有这些都有些冲突,我完全被 VS 的输出弄糊涂了。任何关于 VS 输出的解释将不胜感激。
【问题讨论】:
-
一般来说:每个进程大概有8种内存,其中一些是与其他应用共享的。每个工具都会报告此内存的不同子集,并且一些工具将仅显示共享内存的“您的份额”。我推测 VS 显示“当前在 RAM 中使用的堆”,而其他工具显示“总堆,甚至磁盘上的部分”+“二进制,甚至磁盘上的部分”+“ dll,甚至磁盘上的部分”+“共享内存,甚至磁盘上的部分”+“gpu内存”+“堆栈内存”。
-
blog.mindorks.com/understanding-memory-usage-in-android 有一些关于这一切在 Android 中如何工作的好信息
-
很好的资源,谢谢!
标签: c++ visual-studio memory