Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Qt获取内存信息_Qt_Memory - Fatal编程技术网

使用Qt获取内存信息

使用Qt获取内存信息,qt,memory,Qt,Memory,我如何获得这些信息: 总内存 空闲内存 当前运行的应用程序使用的内存 我认为Qt应该有内存选项,这将是独立于平台的,但是 我找不到它。那么,当我想制作一个显示内存状态的独立于平台的应用程序时,我该怎么办呢?这在Qt中目前是不可能的。您需要定义不同的操作系统内存调用。不幸的是,Qt中没有为此内置任何东西。您必须在每个平台上执行此操作 以下是一些示例,让您开始学习。就在上周,我不得不在我的一个应用程序中实现这一点。下面的代码仍处于开发阶段;可能有错误或泄漏,但它至少可以为您指明正确的方向。我只对

我如何获得这些信息:

  • 总内存
  • 空闲内存
  • 当前运行的应用程序使用的内存
我认为Qt应该有内存选项,这将是独立于平台的,但是
我找不到它。那么,当我想制作一个显示内存状态的独立于平台的应用程序时,我该怎么办呢?

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

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

以下是一些示例,让您开始学习。就在上周,我不得不在我的一个应用程序中实现这一点。下面的代码仍处于开发阶段;可能有错误或泄漏,但它至少可以为您指明正确的方向。我只对总物理RAM感兴趣,但其他值也是以同样的方式提供的。(除了当前应用程序正在使用的内存之外……对此不确定。)

Windows(GlobalMemoryStatusEx)

Linux(/proc/meminfo)

qprocessp;
p、 开始(“awk”,QStringList()在POSIX操作系统(Linux、Solaris,可能是最新的MacOS…)上做得更好:

  • getrusage(…)仔细看看ru_maxrss
  • getrlimit(…),但我没有在中找到任何有用的信息
  • sysconf(…):\u SC\u PAGESIZE、\u SC\u PHYS\u PAGES、\u SC\u AVPHYS\u PAGES
  • sysinfo(…):totalram、freeram、sharedram、totalswap

POSIX计算机上有太多Windows无法使用的宝藏。

既然Qt支持Android和iOS,那它们又如何呢?谢谢你(几年后)。不过,在Mac上,sysctl实际上想要的是hw.memsize,而不是hw.physem。输出类似于“hw.memsize:nnnnn”它以字节的形式返回,所以如果你想要MB,你仍然需要做/(1024*1024)在将字符串转换为int之后。linux示例不应该是:QString system_info=p.ReadAllStandardOutput,而不是memory?@Sashaalm,因为Android使用linux,上面的答案适用于linux,也适用于Android。不确定iOSHeader包含是否真的有用。
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");
}
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();
QProcess p;
p.start("sysctl", QStringList() << "kern.version" << "hw.physmem");
p.waitForFinished();
QString system_info = p.readAllStandardOutput();
p.close();