2011-11-14 49 views
27

获取内存信息如何获得这样的信息:通过当前正在运行的应用程序所使用使用Qt

  • 总内存
  • 可用内存
  • 记忆?

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

+0

http://stackoverflow.com/questions/27201876/memory-management-issue-with-deleting-qquickview-in-qt5-3mingw32/27203897#27203897 – dtech

回答

42

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

谢谢你的代码。 –

+0

很好的答案。谢谢 –

+0

现在Qt支持他们的Android和iOS呢? – sashoalm

0

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

1

对POSIX操作系统(Linux,Solaris和最新也许MacOS的...)好多了:

  • 的getrusage(...)secially看ru_maxrss。
  • getrlimit(...)但我没有找到任何有用的信息。
  • 的sysconf(...):_SC_PAGESIZE,_SC_PHYS_PAGES,_SC_AVPHYS_PAGES
  • SYSINFO(...):TOTALRAM中,freeram,sharedram,totalswap,...

这么多宝物上没有POSIX电脑在Windows上。