【问题标题】:Getting memory information with Qt使用 Qt 获取内存信息
【发布时间】:2011-11-14 13:28:44
【问题描述】:

我如何获得这些信息:

  • 总内存
  • 可用内存
  • 当前运行的应用程序使用的内存?

我认为 Qt 应该有内存选项,这将是平台无关的,但是 我找不到它。那么当我想制作一个显示内存状态的独立于平台的应用程序时,我该怎么做呢?

【问题讨论】:

标签: qt memory


【解决方案1】:

不幸的是,Qt 没有为此内置任何东西。您必须针对每个平台执行此操作。

这里有一些示例可以帮助您入门。就在上周,我不得不在我的一个应用程序中实现这一点。下面的代码仍在开发中;可能存在错误或泄漏,但它至少可以为您指明正确的方向。我只对总物理 RAM 感兴趣,但其他值也以相同的方式可用。 (除了当前应用程序正在使用的内存......不确定那个。)

Windows (GlobalMemoryStatusEx)

MEMORYSTATUSEX memory_status;
ZeroMemory(&memory_status, sizeof(MEMORYSTATUSEX));
memory_status.dwLength = sizeof(MEMORYSTATUSEX);
if (GlobalMemoryStatusEx(&memory_status)) {
  system_info.append(
        QString("RAM: %1 MB")
        .arg(memory_status.ullTotalPhys / (1024 * 1024)));
} else {
  system_info.append("Unknown RAM");
}

Linux (/proc/meminfo)

QProcess p;
p.start("awk", QStringList() << "/MemTotal/ { print $2 }" << "/proc/meminfo");
p.waitForFinished();
QString memory = p.readAllStandardOutput();
system_info.append(QString("; RAM: %1 MB").arg(memory.toLong() / 1024));
p.close();

Mac (sysctl)

QProcess p;
p.start("sysctl", QStringList() << "kern.version" << "hw.physmem");
p.waitForFinished();
QString system_info = p.readAllStandardOutput();
p.close();

【讨论】:

  • 现在 Qt 支持 Android 和 iOS 怎么样?
  • 谢谢你(几年后)。不过,对此有一个附录,在 Mac 上,sysctl 实际上需要 hw.memsize,而不是 hw.physmem。输出类似于“hw.memsize: nnnnnnn”,它以字节返回,所以如果你想要 MB,你仍然需要在将字符串转换为 int 后执行 / (1024 * 1024)。
  • 不应该是linux的例子,是:QString system_info = p.readAllStandardOuptut,不是内存吗?
  • @sashoalm,由于 Android 使用 Linux,Linux 的上述答案也适用于 android。不确定iOS
  • 标题包含会很有帮助。
【解决方案2】:

在 POSIX 操作系统(Linux、Solaris,也许是最新的 MacOS...)上更好:

  • getrusage(...) 专门查看 ru_maxrss。
  • getrlimit(...) 但我没有找到任何有用的信息。
  • sysconf(...) : _SC_PAGESIZE, _SC_PHYS_PAGES, _SC_AVPHYS_PAGES
  • sysinfo(...) : totalram、freeram、sharedram、totalswap、...

在 POSIX 计算机上的许多宝藏在 Windows 上不可用。

【讨论】:

    【解决方案3】:

    目前这在 Qt 中是不可能的。您需要 ifdef 不同的操作系统内存调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-06
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多