我编写了一个完全适用于Ubuntu的代码。但在QNX上遇到意外行为。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <unistd.h>
int main( void )
{
printf( "Total Memory = %ld MB\n",
(sysconf(_SC_PHYS_PAGES)* sysconf(_SC_PAGESIZE))/1048576);
printf("Getting available memory...\n");
printf( "Available = %ld MB\n",
(sysconf(_SC_AVPHYS_PAGES)* sysconf(_SC_PAGESIZE))/1048576);
printf("Getting used memory...\n");
printf( "Used Memory = %ld MB\n",((sysconf(_SC_PHYS_PAGES) -
sysconf(_SC_AVPHYS_PAGES))* sysconf(_SC_PAGESIZE))/1048576);
return EXIT_SUCCESS;
}
这在Ubuntu上运行良好但在QNX上运行不正常。 有没有不同的方法可以做到这一点?
输出:
Total Memory = - 3906 MB
Available = - 3096 MB
Used Memory = 0 MB
答案 0 :(得分:0)
关于_SC_PHYS_PAGES
和_SC_AVPHYS_PAGES
QNX doco page for sysconf
,我看不到任何内容,但确实有注释:
请求的可配置系统限制。如果没有为系统定义name,则返回-1。
因此,QNX实际上无法提供该信息。
您可以直接打印sysconf(oneOfThoseTwo)
并查看是否获得-1
来验证这一点。
如果你做得到一个合适的值,那么它可能与算术溢出有关,在这种情况下你可以重构你的计算以避免它:
#define MEG 1048576
(sysconf(oneOfThoseTwo) + MEG - 1) / MEG) * sysconf(_SC_PAGESIZE)
答案 1 :(得分:-1)
经过大量时间的投入,我有办法实现这一目标。
使用:
Showmem -S
要从c编程语言执行此命令,请使用管道
FILE *fp;
pf = popen(command,"r");
然后你可以从fp中获取数据。