如何更深入地掌握mmap的使用技巧?

2026-05-27 16:300阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计6158个文字,预计阅读时间需要25分钟。

如何更深入地掌握mmap的使用技巧?

mmap是一个常用的系统调用,用于分配内存、读写大文件、链接动态库文件,以及多进程间共享内存。本文首先介绍了进程地址空间与mmap的关系,随后分析了内核代码。

mmap是一个很常用的系统调用,无论是分配内存、读写大文件、链接动态库文件,还是多进程间共享内存,都可以看到其身影。本文首先介绍了进程地址空间和mmap,然后分析了内核代码以了解其实现,最后通过一个简单的demo驱动示例,加深对mmap的理解。

本博客已迁移至CatBro's Blog,那是我自己搭建的个人博客,欢迎关注。

本文链接

进程地址空间及vma

作为前置知识,先来对进程地址空间做个简单介绍,以便更好地理解后面的内容。现代操作系统的内存管理离不开硬件的支持,如分段机制、分页机制。它们用于实现内存的隔离、保护以及高效使用。进程之间地址空间相互隔离,每个进程都有一套页表,实现线性地址到物理地址的转换。

虚拟内存映射

下面是32位系统(x86)的进程地址空间布局图

0~3G 部分是用户空间的地址,3G~4G 部分是内核地址空间。虚拟地址从低到高分别为代码段、数据段(已初始化的静态变量)、bss段(未初始化的静态变量)、heap堆、mmap映射区、栈、命令行参数、环境变量。

从0xc0000000开始就是内核地址空间了。内核地址空间又分为线性内存区和高端内存区。高端内存区是用于vmalloc机制、fixmap等的。在x86体系中,最低16MB物理内存是DMA内存区,用于执行DMA操作。

64位系统(x86_64)上,内存地址可用空间为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF,这是一个非常巨大的地址空间。而Linux实际上只用了低47位(128T),高17位作扩展。

阅读全文
标签:

本文共计6158个文字,预计阅读时间需要25分钟。

如何更深入地掌握mmap的使用技巧?

mmap是一个常用的系统调用,用于分配内存、读写大文件、链接动态库文件,以及多进程间共享内存。本文首先介绍了进程地址空间与mmap的关系,随后分析了内核代码。

mmap是一个很常用的系统调用,无论是分配内存、读写大文件、链接动态库文件,还是多进程间共享内存,都可以看到其身影。本文首先介绍了进程地址空间和mmap,然后分析了内核代码以了解其实现,最后通过一个简单的demo驱动示例,加深对mmap的理解。

本博客已迁移至CatBro's Blog,那是我自己搭建的个人博客,欢迎关注。

本文链接

进程地址空间及vma

作为前置知识,先来对进程地址空间做个简单介绍,以便更好地理解后面的内容。现代操作系统的内存管理离不开硬件的支持,如分段机制、分页机制。它们用于实现内存的隔离、保护以及高效使用。进程之间地址空间相互隔离,每个进程都有一套页表,实现线性地址到物理地址的转换。

虚拟内存映射

下面是32位系统(x86)的进程地址空间布局图

0~3G 部分是用户空间的地址,3G~4G 部分是内核地址空间。虚拟地址从低到高分别为代码段、数据段(已初始化的静态变量)、bss段(未初始化的静态变量)、heap堆、mmap映射区、栈、命令行参数、环境变量。

从0xc0000000开始就是内核地址空间了。内核地址空间又分为线性内存区和高端内存区。高端内存区是用于vmalloc机制、fixmap等的。在x86体系中,最低16MB物理内存是DMA内存区,用于执行DMA操作。

64位系统(x86_64)上,内存地址可用空间为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF,这是一个非常巨大的地址空间。而Linux实际上只用了低47位(128T),高17位作扩展。

阅读全文
标签: