sysinfo为freeram返回不正确的值(即使使用mem_unit)

时间:2013-01-15 20:06:18

标签: c linux sysinfo

我的完整C MATE applet可以在github上找到:https://github.com/geniass/mate-resource-applet/tree/cmake(BRANCH CMAKE)。现在这是个烂摊子,所以请看下面的代码。

我找不到一个小程序来显示我的电脑的免费内存,所以基本上就是这样。我正在使用sysinfo来获取这些信息,它对我系统的总ram(大约4GB,显示3954 MB)工作正常。 htop显示3157 MB使用的3954 MB。

然而,sysinfo给出的免费ram(136 MB)的值显然是错误的(如果ram是ram尚未分配的东西,我不知道)。

This question是同样的问题,但涉及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;
}

输出:

system uptime : 0 days, 10:25:18
total RAM   : 3953.9 MB
free RAM   : 162.1 MB
mem_unit:   : 1
process count : 531

这里发生了什么? freeram不是我认为的吗?

1 个答案:

答案 0 :(得分:1)

当不使用 free 内存时,Linux不喜欢。因此,当有可用内存时,它会暂时将其作为 cache 内存和缓冲区。 可用内存似乎非常低,但只要程序需要内存,Linux就会减少其缓存/缓冲区使用量,并为程序提供所需内容。

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

请参阅this link以获取示例和详细信息。