使用Qt获取内存信息

时间:2011-11-14 13:28:44

标签: qt memory

如何获取此信息:

  • 总记忆
  • 免费记忆
  • 当前正在运行的应用程序使用的内存?

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

3 个答案:

答案 0 :(得分:46)

不幸的是,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();

答案 1 :(得分:1)

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

  • getrusage(...)特别关注ru_maxrss。
  • getrlimit(...)但我没有找到任何有用的信息。
  • sysconf(...):_ SC_PAGESIZE,_SC_PHYS_PAGES,_SC_AVPHYS_PAGES
  • sysinfo(...):totalram,freeram,sharedram,totalswap,...

Windows上没有POSIX计算机上的诸多宝藏。

答案 2 :(得分:0)

这在Qt目前是不可能的。您需要ifdef不同的OS内存调用。