Linux 内存管理与使用全解析
1. 内存测量难题
测量内核空间内存使用情况十分复杂。由于存在无记录的底层分配,我们难以准确统计内核空间的内存使用。当累加已知的内核和用户空间分配时,会出现内存缺失的情况。 /proc/meminfo 中的信息有限,而 /proc/slabinfo 和 /proc/vmallocinfo 提供的额外信息又难以解读。相比之下,用户空间通过进程内存映射能更好地了解内存使用情况。
2. 用户空间内存布局
2.1 延迟分配策略
Linux 对用户空间采用延迟分配策略,仅在程序访问时才映射物理内存页。例如,使用 malloc(3) 分配 1 MiB 的缓冲区时,仅返回内存地址块的指针,而不分配实际的物理内存。页表项会设置标志,使任何读写访问都会被内核捕获,这就是页错误。只有此时,内核才会尝试寻找物理内存页并将其添加到进程的页表映射中。
以下是一个简单的示例程序,用于演示页错误:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/resource.h>
#define BUFFER_SIZE (1024 * 1024)
void print_pgfaults(void)
{
int ret;
struct rusage usage;
ret = ge
超级会员免费看
订阅专栏 解锁全文
1788

被折叠的 条评论
为什么被折叠?



