聊聊sysinfo结构体

sysinfo的定义

sysinfo 结构体的完整定义如下。这个定义包含了一些特定的类型,如 __kernel_long_t__kernel_ulong_t,这些类型是为了在不同架构上提供一致的数据大小而定义的。以下是对这个结构体中每个成员的详细解释:

struct sysinfo {__kernel_long_t uptime;		/* 自系统启动以来的秒数 */__kernel_ulong_t loads[3];	/* 过去1分钟、5分钟和15分钟内的平均负载 */__kernel_ulong_t totalram;	/* 可用的总物理内存大小(字节) */__kernel_ulong_t freeram;	/* 可用的物理内存大小(字节) */__kernel_ulong_t sharedram;	/* 共享内存大小(字节) */__kernel_ulong_t bufferram;	/* 用于缓冲的内存大小(字节) */__kernel_ulong_t totalswap;	/* 总交换空间大小(字节) */__kernel_ulong_t freeswap;	/* 可用的交换空间大小(字节) */__u16 procs;		   	/* 当前运行或等待运行的进程数量 */__u16 pad;		   	/* m68k架构上的显式填充 */__kernel_ulong_t totalhigh;	/* 总高内存大小(字节),通常是高于4GB的内存 */__kernel_ulong_t freehigh;	/* 可用高内存大小(字节) */__u32 mem_unit;			/* 内存大小单位,通常是字节 */char _f[20-2*sizeof(__kernel_ulong_t)-sizeof(__u32)];	/* 填充:为了兼容libc5 */
};

以下是成员变量的详细说明:

  • uptime: 系统自上次启动以来的运行时间,以秒为单位。
  • loads: 一个数组,包含三个元素,分别表示过去1分钟、5分钟和15分钟内的平均系统负载。
  • totalram: 系统总的物理内存大小,以字节为单位。
  • freeram: 当前未使用的物理内存大小,以字节为单位。
  • sharedram: 被多个进程共享的内存大小,以字节为单位。
  • bufferram: 被用作缓冲区的内存大小,以字节为单位。
  • totalswap: 系统总的交换空间大小,以字节为单位。
  • freeswap: 当前未使用的交换空间大小,以字节为单位。
  • procs: 当前系统中的进程数量。
  • pad: 在某些架构(如m68k)上用于对齐的结构体填充。
  • totalhigh: 系统总的高内存大小,通常是高于4GB的内存,以字节为单位。
  • freehigh: 当前未使用的高内存大小,以字节为单位。
  • mem_unit: 内存大小单位,通常为字节,但可能会根据系统的不同而变化。
  • _f: 填充字段,用于确保结构体的大小在所有平台上都是一致的,特别是在兼容旧版本库(如libc5)的情况下。
    请注意,__kernel_long_t__kernel_ulong_t 是内核定义的类型,它们保证在32位和64位系统上具有一致的大小。在32位系统上,__kernel_long_t__kernel_ulong_t 通常分别是 longunsigned long,而在64位系统上,它们可能是64位的。

可用内存

在Linux系统中,系统当前可以使用的内存通常指的是“可用内存”(free memory),这包括以下几部分:

  1. 空闲内存(Free Memory):当前未被任何进程使用的内存。
  2. 缓冲区内存(Buffer Memory):用于文件系统元数据缓存的内存,如磁盘块的缓存。
  3. 缓存内存(Cache Memory):用于文件数据的缓存,可以提高文件访问速度。
    sysinfo 结构体中,这些信息分别可以通过以下字段获得:
  • freeram:表示空闲内存的大小。
  • bufferram:表示缓冲区内存的大小。
  • sharedram:表示共享内存的大小,这部分通常不计入可用内存,因为它可能被多个进程共享使用。
    要计算系统当前可以使用的内存总量,通常是将空闲内存和缓冲区内存相加。缓存内存虽然也被计算在内,但操作系统可以在需要时回收这部分内存以供其他用途。
    以下是如何从 sysinfo 结构体中获取并计算可用内存的示例代码:
#include <sys/sysinfo.h>
#include <stdio.h>
int main() {struct sysinfo info;if(sysinfo(&info) == 0) {// 可用内存 = 空闲内存 + 缓冲区内存 + 可回收的缓存内存long available_memory = info.freeram + info.bufferram;// 打印可用内存(单位:MB)printf("Available Memory: %ld MB\n", available_memory / 1024 / 1024);} else {perror("sysinfo");}return 0;
}

在上述代码中,available_memory 变量计算了系统当前可用的内存总量。需要注意的是,这个计算不包括共享内存(sharedram),因为共享内存的使用情况可能比较复杂。
还要注意,这个计算方法并不是特别精确,因为操作系统可能会在后台使用缓存来提高性能,而这些缓存可能会随时被回收。实际上,操作系统会根据当前的工作负载和内存需求来动态管理这些内存资源。因此,即使可用内存看起来很少,操作系统通常也能有效地处理内存需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动

简简单单 Online zuozuo:欢迎商业合作 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo :联系我们:VX :tja6288 / EMAIL: 347969164@qq.com 文章目录 SpringBoot 通过集成 …

Ubuntu开机自启配置(基于service:以ROS和docker为例)

Ubuntu开机自启配置(以ROS和docker为例) 前言1. service介绍1.1 service命令的基本用法1.2. service命令的常用操作1.3. service命令与systemd的兼容性2. Example之开机启动ROS2.1 创建服务单元文件2.1.1 新建`.service`文件2.1.2 编写`.service`文件2.2 重新加载systemd配置…

怎么给PDF文件加密码?关于PDF文件加密的四种方法推荐

怎么给PDF文件加密码&#xff1f;给PDF文件加上密码是保护文件安全的一种重要方法&#xff0c;特别是当需要在不受授权的访问下保护敏感信息时。这个过程不仅仅是简单地设置密码&#xff0c;而是涉及到对文档内容和访问控制的深思熟虑。加密PDF文件可以有效防止未经授权的用户查…

杂谈(杂鱼谈论c语言)——2.大小端字节序

⼤⼩端字节序和字节序判断 当我们了解了整数在内存中存储后&#xff0c;我们调试看⼀个细节&#xff1a; #include <stdio.h> int main() {int a 0x11223344;return 0; } 调试的时候&#xff0c;我们可以看到在a中的 0x11223344 这个数字是按照字节为单位&#xff0c;…

creality ender2的3D打印经验教训

创想云-3D打印模型库-一体化3D打印平台 1.开机后要放一张白纸进行检查&#xff0c;看看打印头立平台的距离&#xff0c;如果太近&#xff0c;会灼烧平台&#xff0c;会造成下面的结果&#xff1a; 2.下载模型&#xff0c;可以在线切片&#xff0c;要看看是否要支撑 没有支撑可…

构建云原生Java应用

引言 云原生技术正在改变软件开发和部署的方式。云原生应用利用了云计算的优势&#xff0c;如弹性、可扩展性和高可用性。对于Java开发者来说&#xff0c;构建云原生应用意味着需要采用微服务架构、服务网格、持续部署等技术。本文将探讨如何设计和实现云原生Java应用。 云原…

vulntarget-a

实际部署之后的win7 ip: 192.168.127.128 具体攻击过程如下 win7 扫描服务 使用fscan扫描win 7中的服务以及漏洞 ./fscan -h 192.168.127.128 扫出来一个ms17-010以及通达oa的漏洞&#xff0c;既然有永恒之蓝的&#xff0c;直接上MSF就行了 msf6 > search ms17-010 msf6…

Bouncy Castle集成SM2与SM3

在Bouncy Castle库中&#xff0c;SM2和SM3是两种分别用于非对称加密和数字签名的密码算法&#xff0c;它们也可以结合使用&#xff0c;形成一种高安全性的加密签名方案&#xff0c;即SM2withSM3。以下是对SM2SM3的详细解释&#xff1a; 一、SM2算法 SM2是一种由中国国家密码管…

由CANoe自带协议栈在TCP断开连接时同时发送两条FIN报文引起的注意事项

在我写这篇文章CAPL如何在底层模拟TCP Server端断开TCP连接时,我发现了一个奇怪的现象。我为了使用CAPL组装报文的方式实现TCP Server断开连接的过程,插入一个网络节点作为Client端。为了让Client能够发起连接和发起断开连接,给网络节点配置了独立的TCP/IP Stack,也就是CAN…

D. Fun(cf962div3)

题意&#xff1a;找出满足abacbc<n&&abc<x的a&#xff0c;b&#xff0c;c的个数 分析&#xff1a;遍历a&#xff0c;遍历符合条件的b&#xff0c;找出两个式子c的最大值的最小值相加。 代码&#xff1a; #include<bits/stdc.h> using namespace std; ty…

学前教育优化算法,原理详解,MATLAB代码免费获取

学前教育优化算法&#xff08;Preschool Education Optimization Algorithm&#xff0c;PEOA)是一种受学前教育过程中孩童的活动行为启发而提出的元启发式优化算法。学前教育在儿童的早期发展中起着至关重要的作用&#xff0c;并为他们未来的学习旅程奠定基础。作为幼儿学习者发…

算法:常见时间复杂度

常见时间复杂度 O(1) - 常数时间复杂度O(log n) - 对数时间复杂度O(n) - 线性时间复杂度O(n log n) - 线性对数时间复杂度O(n^2) - 平方时间复杂度O(2^n) - 指数时间复杂度O(n!) - 阶乘时间复杂度 O(1) - 常数时间复杂度 定义&#xff1a;算法的运行时间与输入规模无关&#x…

【JavaScript】详解Day.js:轻量级日期处理库的全面指南

文章目录 一、Day.js简介1. 什么是Day.js&#xff1f;2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…

Android SurfaceFlinger——GraphicBuffer的生成(三十二)

通过前面的学习我们知道,在 SurfaceFlinger 中使用的生产者/消费者模型,Surface 做为生产者一方存在如下两个比较重要的函数: dequeueBuffer:获取一个缓冲区(GraphicBuffer),也就是 GraphicBuffer 生成。queueBuffer :把缓冲区(GraphicBuffer)放入缓冲队列中。 …

k3s节点内的服务发现与负载均衡

K3s 是一个轻量级的 Kubernetes 发行版&#xff0c;它简化了 Kubernetes 的安装和管理&#xff0c;同时保持了与 Kubernetes API 的兼容。在 K3s 中&#xff0c;服务发现与负载均衡的机制与标准的 Kubernetes 非常相似。以下是 K3s 中节点内服务发现与负载均衡的主要机制&#…

查看空闲gpu

如果你希望检查 Unix 或 Linux 系统上的 GPU 使用情况&#xff08;特别是查找空闲的 NVIDIA GPU&#xff09;&#xff0c;可以使用 NVIDIA 提供的命令行工具 nvidia-smi。 打开终端并输入以下命令&#xff1a; nvidia-smi 这个命令将输出你的 NVIDIA GPU 的当前状态&#xf…

Python | ValueError: could not convert string to float: ‘example’

Python | ValueError: could not convert string to float: ‘example’ 在Python编程中&#xff0c;类型转换是一个常见的操作。然而&#xff0c;当尝试将一个字符串转换为浮点数时&#xff0c;如果字符串的内容不是有效的浮点数表示&#xff0c;就会遇到“ValueError: could…

labview四字节转浮点数

1.labview四字节转浮点数 2.Labview怎么把串口接收到的数据转换成浮点数&#xff1f; Labview怎么把串口接收到的数据转换成浮点数&#xff1f;

如何跨越 LangChain 应用研发的最后一公里

说 [LangChain] 是现在最流行的 AI 应用开发框架&#xff0c;应该没有人出来反对吧。LangChain 的出现极大地简化了基于大型语言模型&#xff08;LLM&#xff09;的 AI 应用构建难度&#xff0c;如果把 AI 应用比作一个人的话&#xff0c;那么 LLM 相当于这个人的“大脑”&…

c#中Oracle.DataAccess.dll连接数据库的报错处理

通过DataAccess.dll连接Oracle数据库时&#xff0c;报如下错误 The provider is not compatible with the version of Oracle client 最终原因&#xff1a; dll 文件复制不全(4个文件必须) oracle.dataaccess.dll oci.dll oraociei11.dll oraops11w.dll