【问题标题】:RAM detection issue on 32-bit OS32 位操作系统上的 RAM 检测问题
【发布时间】:2017-04-28 17:23:48
【问题描述】:

我想使用GetPhysicallyInstalledSystemMemory 函数检测内存,问题是,它只能在 64 位操作系统上正确显示RAM。在 32 位操作系统上,我得到错误的值。比如下图:

在虚拟机上 (Windows Vista SP2 x32):

代码:

ULONGLONG ramSize;
BOOL result = GetPhysicallyInstalledSystemMemory(&ramSize);

if (result == TRUE) {
    QString ramMB = QString::number(ramSize / (1024.0));
    QString ramGB = QString::number(ceil(ramSize / (1024.0 * 1024.0)));
    QMessageBox::information(this, "Test_MB", ramMB.append(" MB")); // RAM in MB
    QMessageBox::information(this, "Test_GB", ramGB.append(" GB")); // RAM in GB
}

为什么它不能在 32 位操作系统上运行?谢谢。

【问题讨论】:

  • 你在实体盒子上试过了吗?可能是 VM BIOS 问题,我在文档中看到 - GetPhysicallyInstalledSystemMemory 函数从计算机的 SMBIOS 固件表中检索物理安装的 RAM 量。这可能与 GlobalMemoryStatusEx 函数报告的数量不同,后者将 MEMORYSTATUSEX 结构的 ullTotalPhys 成员设置为可供操作系统使用的物理内存量。
  • 定义“错误”。它应该是什么?您知道 32 位系统的局限性吗?你读过文档吗?
  • 要消除任何演示问题,请尝试printf("%I64u\n",ramSize);。这不太可能,因为您在调用 QString::number 之前强制转换为 double,但最好检查一下。
  • @dsolimano 也许是 VM BIOS 的问题。我没有带有 x32 操作系统的机器来在真实硬件上对其进行测试。
  • @Cobra91151 实际上我也不再这样做了。 . .有没有人?可能比您担心 Windows 2000 兼容性更值得担心。

标签: c++ winapi ram windows-applications


【解决方案1】:

我已经安装了 Windows 7 x32 并对其进行了测试。现在这些值是正确的。所以这个错误与VMware Workstation有关。我稍后会向 VMware 报告。谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 2015-09-26
    • 2013-08-29
    • 2021-02-12
    • 2011-12-18
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多