第13课:活用内存映射与虚拟内存,让应用更高效

本节课,我们要介绍几个对虚拟内存进行系统级控制的系统调用,合理使用它们,能极大地提高应用的执行效率,增强应用的安全性,主要包括以下几方面内容:

  • 内存映射
  • 内存保护
  • 内存锁定

13.1 内存映射

13.1.1 概述

内存映射的功能是在进程的内存映射表中建立一条新的映射表项,也就是分配一块新的虚拟内存给调用进程。并且,可以指定内存内容与某个文件内容相对应。

提供内存映射功能的系统调用是:

void * mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

其中:

  • 参数 addr 指定期望的映射目标地址,如果给 addr 传递 NULL,则表示让内核选择一个合适的地址;
  • 参数 length 指定要映射的数据的字节数,内核会把它对齐到内存页大小的下一个倍数;
  • 参数 prot 指定地址映射之后的访问权限,它的取值可以是 PROT_NONE,或者 PROT_READ、PROT_WRITE、PROT_EXEC 几种值的任意组合;
  • 参数 fd 指定要映射的文件;
  • 参数 offset 指定映射内容在文件中的偏移量。

flags 参数比较复杂,它指定执行内存映射时使用的操作选项,不同选项的组合适用于不同的应用场景。其中有两个选项是互斥并且是必选项。

  • MAP_PRIVATE:私有映射。在这种映射模式下,映射到内存中的内容会根据文件内容进行初始化,但是内存中内容的变化不会更新

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值