在linux上用c语言查看内存硬件信息、内存使用信息代码详细版
时间: 2024-12-23 14:14:50 浏览: 19
在Linux上使用C语言查看内存硬件信息和内存使用情况通常涉及到系统调用或特定库函数,如`sysconf`、`mmap`、`brk`、`malloc`等。以下是一些基本示例:
1. **查看总内存硬件信息**:
你可以通过`sysconf(_SC_PHYS_PAGES)`获取物理页数,然后乘以页面大小(`sysconf(_SC_PAGE_SIZE)`)得到总内存。这里有一个简单的例子:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/sysconf.h>
#include <sys/types.h>
int main() {
size_t pageSize = sysconf(_SC_PAGE_SIZE);
long physicalPages = sysconf(_SC_PHYS_PAGES);
long totalMemory = pageSize * physicalPages;
printf("Total memory (in bytes): %ld\n", totalMemory);
return 0;
}
```
2. **查看内存使用信息**:
Linux提供了一些工具如`free`, `top`, 或者内建的`getrusage`用于统计进程的内存占用。但直接从C程序访问这些信息通常需要更复杂的操作。例如,`getrusage(RUSAGE_SELF)`可以获取当前进程的信息,其中包括内存使用量,但这需要链接到`rt`库:
```c
#include <stdio.h>
#include <sys/resource.h>
#include <unistd.h>
struct rusage usage;
void get_memory_usage() {
if (getrusage(RUSAGE_SELF, &usage) == 0) {
u_long mem_used = usage.ru_maxrss; // ru_maxrss代表最大RSS内存使用
printf("Max Resident Set Size (MB): %.2f\n", mem_used / 1024.0);
} else {
perror("Failed to get resource usage");
}
}
int main() {
get_memory_usage();
return 0;
}
```
请注意,这些代码片段仅作演示,并不一定适用于所有Linux发行版,因为它们依赖于系统调用的具体实现。在实际应用中,可能还需要处理错误检查和其他细节。
阅读全文