【发布时间】:2011-11-14 13:28:44
【问题描述】:
我如何获得这些信息:
- 总内存
- 可用内存
- 当前运行的应用程序使用的内存?
我认为 Qt 应该有内存选项,这将是平台无关的,但是 我找不到它。那么当我想制作一个显示内存状态的独立于平台的应用程序时,我该怎么做呢?
【问题讨论】:
我如何获得这些信息:
我认为 Qt 应该有内存选项,这将是平台无关的,但是 我找不到它。那么当我想制作一个显示内存状态的独立于平台的应用程序时,我该怎么做呢?
【问题讨论】:
不幸的是,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();
【讨论】:
在 POSIX 操作系统(Linux、Solaris,也许是最新的 MacOS...)上更好:
在 POSIX 计算机上的许多宝藏在 Windows 上不可用。
【讨论】:
目前这在 Qt 中是不可能的。您需要 ifdef 不同的操作系统内存调用。
【讨论】: