【问题标题】:How to get the total 'percentage' of RAM in C++?如何获得 C++ 中 RAM 的总“百分比”?
【发布时间】:2022-01-12 14:16:22
【问题描述】:

您好,我正在用 C++ 构建一个应用程序。我想获得 Windows 机器正在使用的 RAM 百分比。我尝试了一些代码,例如:

string getRamUsage()
{
    MEMORYSTATUSEX memInfo;
    memInfo.dwLength = sizeof(MEMORYSTATUSEX);
    DWORDLONG physMemUsed = memInfo.ullTotalPhys - memInfo.ullAvailPhys;

    return to_string(physMemUsed);
}

但它只是返回一些汇编值。我能得到解决方案吗?

【问题讨论】:

  • 嗯?物理内存很昂贵。我希望我的电脑正在使用它。
  • 这听起来确实像 X/Y 问题。你实际上试图用这些信息解决什么问题。
  • 定义“使用”的含义。如果你想到你的磁盘缓存,那么如上所述,如果我系统的所有内存都没有一直被使用,我会很失望。

标签: c++ winapi ram


【解决方案1】:

您需要拨打GlobalMemoryStatusEx获取数据。

MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);

// it already contains the percentage
auto memory_load = statex.dwMemoryLoad; 

// or calculate it from other field if need more digits.
auto memory_load = 1 - (double)statex.ullAvailPhys / statex.ullTotalPhys;

注意:你应该检查GlobalMemoryStatusEx的返回值,以防它失败。

【讨论】:

  • 您应该检查答案中的返回值。
  • @MikeVine 添加了注释,但不确定这里是否有必要。
  • 我尝试使用这段代码``` string getRamUsage() { MEMORYSTATUSEX statex; DWORD memUsage = statex.dwMemoryLoad;返回到字符串(内存使用); } ``` 它返回 0 而不是返回内存使用情况
  • @PlayZBhai 什么?你不打电话给GlobalMemoryStatusEx
  • @drescherjm 感谢您的帮助 :) // @PlayZ 很好,它已经解决了,我已经更新答案更清楚了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 2021-01-09
  • 1970-01-01
相关资源
最近更新 更多