Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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
C sysinfo为freeram返回不正确的值(即使使用mem_单元)_C_Linux_Sysinfo - Fatal编程技术网

C sysinfo为freeram返回不正确的值(即使使用mem_单元)

C sysinfo为freeram返回不正确的值(即使使用mem_单元),c,linux,sysinfo,C,Linux,Sysinfo,我的完整C MATE小程序可以在github中找到:(BRANCH CMAKE)。这是一个乱七八糟的现在,所以看到下面的代码 我找不到一个小程序来显示我的计算机的空闲ram,所以基本上就是这样。我使用sysinfo来获取这些信息,对于我的系统的总ram(大约4GB,显示3954MB)来说,它工作得很好。htop显示3954 MB中使用了3157 MB 然而,sysinfo为空闲ram(136mb)提供的值显然是错误的(如果空闲ram是尚未分配的ram或其他什么,我不知道) 是相同的问题,但涉及m

我的完整C MATE小程序可以在github中找到:(BRANCH CMAKE)。这是一个乱七八糟的现在,所以看到下面的代码

我找不到一个小程序来显示我的计算机的空闲ram,所以基本上就是这样。我使用sysinfo来获取这些信息,对于我的系统的总ram(大约4GB,显示3954MB)来说,它工作得很好。htop显示3954 MB中使用了3157 MB

然而,sysinfo为空闲ram(136mb)提供的值显然是错误的(如果空闲ram是尚未分配的ram或其他什么,我不知道)

是相同的问题,但涉及mem_unit的解决方案不起作用,因为在我的系统上mem_unit=1

下面是一个最小程序,它给出了相同的值:

#include <stdio.h>
#include <sys/sysinfo.h>


int main() {
    /* Conversion constants. */
    const long minute = 60;
    const long hour = minute * 60;
    const long day = hour * 24;
    const double megabyte = 1024 * 1024;
    /* Obtain system statistics. */
    struct sysinfo si;
    sysinfo (&si);
    /* Summarize interesting values. */
    printf ("system uptime : %ld days, %ld:%02ld:%02ld\n", 
            si.uptime / day, (si.uptime % day) / hour, 
            (si.uptime % hour) / minute, si.uptime % minute);
    printf ("total RAM   : %5.1f MB\n", si.totalram / megabyte);
    printf ("free RAM   : %5.1f MB\n", si.freeram / megabyte);
    printf ("mem_unit:   : %u\n", si.mem_unit);
    printf ("process count : %d\n", si.procs);
    return 0;
}
这是怎么回事?freeram不是我想象的那样吗?

Linux不喜欢在任何地方都不使用空闲内存。因此,当有可用的空闲内存时,它会暂时将其作为缓存和缓冲区。可用内存似乎很低,但只要程序需要内存,Linux就会减少其缓存/缓冲区的使用,并为程序提供所需的内存

Linux命令
free-m
显示内存、缓存和缓冲区的状态

请参阅示例和详细信息。

Linux不喜欢无处使用可用内存。因此,当有可用的空闲内存时,它会暂时将其作为缓存和缓冲区。可用内存似乎很低,但只要程序需要内存,Linux就会减少其缓存/缓冲区的使用,并为程序提供所需的内存

Linux命令
free-m
显示内存、缓存和缓冲区的状态


请参阅示例和详细信息。

好吧。。。你怎么定义“自由内存”?!如果Linux在RAM中保留了一些东西,即使它不需要(它可以随时扔掉它们),那么RAM是免费的还是被使用的?@KerrekSB那么htop如何定义“免费RAM”?关于Linux在内存中保存东西,我会说。。。免费?Linux使用大量的可用内存作为缓冲区的缓存,并在应用程序需要时自动释放缓冲区分配的内存。请参阅。@ring0谢谢,这与Linux一样有意义。您应该添加它作为答案(即添加TBebuffer和缓存以获得总可用内存)。。。你怎么定义“自由内存”?!如果Linux在RAM中保留了一些东西,即使它不需要(它可以随时扔掉它们),那么RAM是免费的还是被使用的?@KerrekSB那么htop如何定义“免费RAM”?关于Linux在内存中保存东西,我会说。。。免费?Linux使用大量的可用内存作为缓冲区的缓存,并在应用程序需要时自动释放缓冲区分配的内存。请参阅。@ring0谢谢,这与Linux一样有意义。您应该添加它作为一个答案(即添加tbebuffer和cache以获得总的可用内存),因为您刚刚意识到sysinfo没有cachedram,只有bufferram。所以我将使用/proc/meminfo。我刚刚意识到sysinfo没有cachedram,只有bufferram。那么我就使用/proc/meminfo。
system uptime : 0 days, 10:25:18
total RAM   : 3953.9 MB
free RAM   : 162.1 MB
mem_unit:   : 1
process count : 531