揭秘!mmap/munmap函数

在 Linux 内核中,使用 mmap 函数可以将文件或者匿名的内存映射到进程的地址空间中。

mmap/munmap函数是用户空间中常用的系统调用函数,无论是在用户程序中分配内存、读写大文件、链接动态库文件,还是多进程间共享内存,都可以看到mmap/munmap函数的身影。

函数相关参数

1.start:指定映射到进程地址空间的起始地址。为了提高可移植性,通常设置为 NULL,由内核自动分配合适的地址。


2.len:表示映射到进程地址空间的大小。


3.prot:设置内存映射区域的读写权限,可以是 PROT_EXEC(可执行)、PROT_READ(可读)、PROT_WRITE(可写)或 PROT_NONE(不可访问)。


4.flags:用于设置内存映射的属性,如 MAP_SHARED(共享映射)、MAP_PRIVATE(私有映射)、MAP_ANONYMOUS(匿名映射)等。


5.fd:如果是文件映射,表示打开文件的句柄。


6.offset:在文件映射时,表示文件的偏移量。

关于 flags 参数的不同取值

1.MAP_SHARED:创建一个共享映射区域,多个进程可以通过共享映射方式来映射同一个文件,修改会同步到磁盘文件中。


2.MAP_PRIVATE:创建一个私有的写时复制映射,多个进程可以映射同一个文件,但各自的修改不会影响其他进程,也不会同步到磁盘文件中。


3.MAP_ANONYMOUS:创建一个没有关联文件的匿名映射。

关于匿名映射和文件映射

1.匿名映射:没有映射到具体文件,内存区域的内容会初始化为0。


2.文件映射:将文件内容映射到进程的地址空间,应用程序可以直接读写文件内容。

相关学习资料已经给大家打包好放在下面啦,大家点击领取👇

扫码进群领资料icon-default.png?t=N7T8https://ad.pdb2.com/l/do0bea1n8Bf4EJm

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值