加载中...
内存映射是一种把文件或设备直接映射到进程虚拟地址空间的机制,应用像访问内存一样读写文件,由操作系统按需分页加载。它避免了显式读写系统调用的数据拷贝,常用于大文件处理、共享内存和高性能存储引擎。

| 中文名 | 内存映射 |
| 系统调用 | mmap |
| 所属层 | 操作系统 |
| 关键机制 | 按需分页 |
| 典型用途 | 大文件、共享内存 |
内存映射(Memory-Mapped File,系统调用名mmap)是操作系统提供的一种机制,它将磁盘文件或匿名内存区域直接映射进程的虚拟地址空间,使程序能像访问普通内存指针那样读写文件内容,而数据的实际加载与回写由内核的分页机制透明完成。
mmap是类Unix系统的核心系统调用,Windows上有对应的文件映射API。传统文件读写需经read/write系统调用,把数据从内核页缓存拷贝到用户缓冲区;而内存映射让用户空间直接访问页缓存所在的物理页,减少一次拷贝,并把文件读写融入统一的虚拟内存管理。
数据库和存储引擎如LMDB、部分RocksDB场景用mmap访问数据文件,省去显式I/O。动态链接器用它加载共享库,进程间通信用匿名映射实现共享内存。处理超过内存容量的大文件时,mmap让程序无需一次性载入全部数据。
问:mmap一定比传统读写快吗?答:不一定。它在随机访问大文件和多进程共享时优势明显,但对顺序小文件、或需要精确控制I/O时机的场景,缺页中断和页管理开销反而可能拖慢速度。
问:访问映射区时程序崩溃了会怎样?答:若访问越界或底层文件被截断,可能触发总线错误信号导致进程终止,因此使用时需谨慎处理文件大小变更等边界情况。

| 中文名 | 内存映射 |
| 系统调用 | mmap |
| 所属层 | 操作系统 |
| 关键机制 | 按需分页 |
| 典型用途 | 大文件、共享内存 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧