【问题标题】:Identical code using more than double the RAM memory on different computers在不同计算机上使用两倍以上 RAM 内存的相同代码
【发布时间】:2021-11-10 23:29:48
【问题描述】:

我正在使用 OpenGL 用 C++ 创建一个 Minecraft 克隆。

我今天注意到,在我的笔记本电脑上调试程序时,RAM 使用量高于我台式机上的 RAM 使用量(~1.3gb vs ~500mb)。我从 Visual Studio 的诊断工具中获取这些内存编号。

我使用的是 GitHub,即使使用相同的分支、相同的提交、完全相同的代码,笔记本电脑也会使用更多 RAM。我尝试清理解决方案,重新构建,再次克隆,但没有任何效果。

Windows 任务管理器的内存使用也不同。

我不知道会发生什么。这些计算机位于不同的平台上(笔记本电脑是 Intel 10th,台式机是 Ryzen 3000),笔记本电脑的 RAM 较少(8gb 对 16gb)。两者都使用最新的 Windows 10。我使用的是 Visual Studio Community 2019。

我不确定平台差异是否会对内存分配造成如此巨大的影响。

【问题讨论】:

  • 您是否有可能在笔记本电脑上运行应用程序时启用了调试标志,而不是桌面上?
  • 您是否可能在 x86 模式下编译一个而另一个在 x64 下编译?这可能使某些类型的大小翻倍。
  • 我打算把钱放在使用统一内存的笔记本电脑上。换句话说,GPU 内存使用情况被报告为 RAM。如果是这种情况,桌面上的 GPU 内存使用量应该大致匹配差异(假设两者都以相同的分辨率运行)。
  • 我编辑了上面的评论更清楚,电脑的展台正在运行,在运行按钮侧面的 Visual Studio 选择中以 x64 版本运行。
  • @Frank 可能想通了。我将进行更多测试以确认。

标签: c++ windows visual-studio memory


【解决方案1】:

许多笔记本电脑架构使用称为统一内存的东西。也就是说,只有一个大内存池在 CPU 和 GPU(或 APU 上的等效部分)之间共享。

在这样的架构上,分配视频内存与分配 RAM 本质上是一样的。不过,这些都被图形驱动程序隐藏了。

因此,在笔记本电脑上使用比在具有独立 GPU 的台式机上更多 RAM 的图形密集型应用程序也就不足为奇了。然而,与其说它使用更多内存,不如说它使用的内存以不同的方式排列。

假设两个平台以相同的分辨率运行并且加载了相同的资源,您会期望GPU Memory + RAM 在台式机上的使用大致相当于RAM 在笔记本电脑上的使用。

强调大致这个词。不同的图形架构/驱动程序以不同的方式使用内存,所以在这里不要指望一对一的匹配。例如:

  • 单个 1080p 帧缓冲区至少需要几兆字节,具体取决于驱动程序与实际屏幕的交互方式,其中有多少很少是显而易见的。
  • 平铺架构可以完全绕过需要大块 完全记忆。

这是最有可能的情况。

【讨论】:

  • 我强迫我的笔记本电脑使用独立 GPU 而不是 iGPU,并且 RAM 使用率几乎与预期相符。我没想到它会使用我的 iGPU,即使它是一个 3d 应用程序。现货:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
相关资源
最近更新 更多