目录
1.free命令
使用free指令可查看内存使用情况
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* fp = popen("free -b | grep Mem", "r");
if (fp == NULL) {
perror("popen");
return 1;
}
unsigned long long total_memory = 0;
unsigned long long used_memory = 0;
unsigned long long free_memory = 0;
char line[256];
if (fgets(line, sizeof(line), fp)) {
// 把line中的值赋值给变量
sscanf(line, "%*s %llu %llu %llu", &total_memory, &used_memory, &free_memory);
}
pclose(fp);
printf("Total Memory: %llu bytes\n", total_memory);
printf("Used Memory: %llu bytes\n", used_memory);
printf("Free Memory: %llu bytes\n", free_memory);
return 0;
}
2./proc/meminfo查看内存信息
#include <stdio.h>
int main() {
FILE* file = fopen("/proc/meminfo", "r");
if (file == NULL) {
perror("fopen");
return 1;
}
unsigned long long total_memory = 0;
unsigned long long used_memory = 0;
unsigned long long free_memory = 0;
char line[256];
while (fgets(line, sizeof(line), file)) { //逐行读取文件信息
if (sscanf(line, "MemTotal: %llu kB", &total_memory) == 1) {
total_memory *= 1024; // 将单位转换为字节
} else if (sscanf(line, "MemAvailable: %llu kB", &free_memory) == 1) {
free_memory *= 1024; // 将单位转换为字节
used_memory = total_memory - free_memory;
break;
}
}
fclose(file);
printf("Total Memory: %llu bytes\n", total_memory);
printf("Used Memory: %llu bytes\n", used_memory);
printf("Free Memory: %llu bytes\n", free_memory);
return 0;
}
3.使用结构体获取内存大小
struct sysinfo {
long uptime; // 自系统启动以来的时间(以秒为单位)
unsigned long long loads[3]; // 1分钟、5分钟和15分钟的平均负载值
unsigned long totalram; // 系统总内存大小(以页面为单位)
unsigned long freeram; // 系统可用内存大小(以页面为单位)
unsigned long sharedram; // 共享内存大小(以页面为单位)
unsigned long bufferram; // 缓冲区内存大小(以页面为单位)
unsigned long totalhigh; // 高端内存大小(以页面为单位)
unsigned long freehigh; // 可用高端内存大小(以页面为单位)
unsigned int mem_unit; // 内存单位的大小(以字节为单位)
char _f[20-2*sizeof(long)-sizeof(int)]; // 保留字段,用于对齐
};
uptime
:自系统启动以来的时间(以秒为单位)。loads
:一个包含三个元素的数组,分别表示系统的平均负载值。loads[0]
是过去1分钟的平均负载,loads[1]
是过去5分钟的平均负载,loads[2]
是过去15分钟的平均负载。totalram
:系统总内存大小(以页面为单位)。freeram
:系统可用内存大小(以页面为单位)。sharedram
:共享内存大小(以页面为单位)。bufferram
:缓冲区内存大小(以页面为单位)。totalhigh
:高端内存大小(以页面为单位)。freehigh
:可用高端内存大小(以页面为单位)。mem_unit
:内存单位的大小(以字节为单位)。请注意,
totalram
和freeram
字段表示的是页面数量,而不是字节数。要计算实际的内存大小,可以将这些值乘以mem_unit
字段,得到以字节为单位的内存大小。使用
sysinfo
函数可以填充struct sysinfo
结构体,以便获取系统的各种信息。
#include <stdio.h>
#include <sys/sysinfo.h>
int main() {
struct sysinfo info;
if (sysinfo(&info) != 0) {
perror("sysinfo");
return 1;
}
unsigned long long total_memory = info.totalram * info.mem_unit;
unsigned long long used_memory = (info.totalram - info.freeram) * info.mem_unit;
unsigned long long free_memory = info.freeram * info.mem_unit;
printf("Total Memory: %llu bytes\n", total_memory);
printf("Used Memory: %llu bytes\n", used_memory);
printf("Free Memory: %llu bytes\n", free_memory);
return 0;
}