gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:17 35 4
gpt4 key购买 nike

我的完整 C MATE 小程序可以在 github 上找到:https://github.com/geniass/mate-resource-applet/tree/cmake (分支CMAKE)。现在是一团糟,所以请看下面的代码。

我找不到一个小程序来显示我的计算机的空闲内存,所以基本上就是这样。我正在使用 sysinfo 来获取此信息,它适用于我系统的总内存(大约 4GB,显示 3954 MB)。 htop 显示已使用 3157 MB,共 3954 MB。

但是,sysinfo 给出的空闲内存 (136 MB) 的值显然是错误的(如果空闲内存是尚未分配的内存或其他东西,我不知道)。

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 不是我想的那样吗?

最佳答案

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

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

参见 this link例如和详细信息。

关于c - sysinfo 为 freeram 返回不正确的值(即使使用 mem_unit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345937/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com