C语言--mmap()函数

mmap()函数

参考:mmap
mmap函数是QNX操作系统中内存管理的核心,可以使用该函数将一个指向共享内存对象的文件描述符(或者一部分)映射仅进程地址空间中。还可以使用该函数将普通文件或类型化内存对象(typed memory objects)映射到进程地址空间中。

mmap函数原型:

void * mmap(void *where_i_want_it, 
				size_t length, 
				int memory_protections, 
				int mapping_flags, 
				int fd, 
				off_t offset_within_shared_memory);

其含义是:*将一个共享内存对象中从offset_within_shared_memory开始的length字节映射到当前进程地址空间中,并根据memory_protections设置访问权限,mapping_flags决定映射行为。

参数

  • where_i_want_it: 你希望映射到的地址(通常传入0,系统会自动选择地址)
  • length: 映射的内存长度(单位为字节)
  • memory_protections: 内存访问权限
  • mapping_flags: 映射的类型和附加选项
  • fd: 共享内存对象或文件的文件描述符
  • offset_within_shared_memory: 映射起始偏移量

函数映射完成后会返回映射区域的地址。

访问权限(memory_protections)

宏定义描述
PROT_EXEC内存可执行
PROT_NOCACHE内存不适用缓存(适用于硬件共享内存)
PROT_NONE不允许任何访问
PROT_READ内存可读
PROT_WRITE内存可写

若访问的共享内存可能被硬件更改(如帧缓存或网卡),应使用PROT_NOCACHE,否则可能读到缓存的旧数据。

映射类型(mapping_flags):

主要映射类型(二必选一):

映射类型描述
MAP_SHARED映射可被多个进程共享,修改会同步回底层对象
MAP_PRIVATE仅进程私有,修改不会影响原始对象(复制时写机制)

其他常用表示(可与上面组合):

MAP_ANON匿名映射,不关联文件,fd必须为NOFD,内存内容初始化为零
MAP_FIXED强制映射到where_i_want_it指定的地址
MAP_PHYS访问物理内存,fd设为NOFD,结合MAP_ANON可分配连续物理内存

:不要对同一个文件同时使用write()mmap()的共享可写映射,否则可能产生未定义行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

序章ʸ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值