HeartLinks:名为爱的谜题免安装绿色版
· 2025-09-28
mmap
是一个非常重要且强大的系统调用,全称是 memory map(内存映射)。 mmap
的核心思想是:将文件或其他资源直接"映射"到进程的内存地址空间中。
想象一下:
// 传统方式:read/write
read(fd, buffer, size);
write(fd, buffer, size);
// mmap 方式:直接内存访问
void *addr = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
// 现在可以直接像操作内存一样操作文件内容
char data = ((char*)addr)[0];
多个进程可以映射同一个文件,实现数据共享。
分配大块内存(类似 malloc,但更适合大内存分配)。
特性 | 传统 read/write | mmap |
---|---|---|
性能 | 需要系统调用,数据拷贝 | 直接内存访问,零拷贝 |
便捷性 | 需要缓冲区管理 | 像操作普通内存一样简单 |
共享 | 复杂 | 天然支持进程间共享 |
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
// 将文件映射到内存并读取
int fd = open("example.txt", O_RDONLY);
void *addr = mmap(NULL, file_size, PROT_READ, MAP_PRIVATE, fd, 0);
// 现在可以直接像操作内存一样读取文件内容
printf("First byte: %cn", ((char*)addr)[0]);
// 使用完后取消映射
munmap(addr, file_size);
close(fd);
mmap
是操作系统提供的一种高效机制,它:
它是一个相对底层的概念,但被广泛用于各种高性能的软件系统中。理解 mmap 有助于你更好地理解现代计算机系统的工作原理!
· 2025-09-28
18.1G · 2025-09-28
7.70G · 2025-09-28