首页 > 编程知识 正文

显示内存和共享内存区别,内存映射和实际内存

时间:2023-05-04 19:11:44 阅读:22658 作者:280

映射函数void*mmap(void*addr,size_t length,int port,int flags,int fd,off_t offset ) )。

创建角色共享内存映射

参数addr :指定地图区域的起始地址。 通常传递NULL,表示系统将自动分配。

length :共享内存映射区域的大小。=文件的实际大小)

prot :共享内存映射部分的读写属性。 PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE

flags :标记共享内存的共享属性。 MAP_SHARED、MAP_PRIVATED

软盘:用于创建共享内存映射区域文件的文件描述符。

offset :默认值0。 指示地图文件是所有的。 需要4k的整数倍。

返回值成功,返回地图区域的起始地址。

失败了。 返回map_failed((void* )-1 )并设置错误。

munmap函数intmunmap(void*addr,size_t length () ) ) ) ) ) ) ) ) )

作用释放映射区域

使用注意事项文件大小为0,映射区域的大小不是0。 发生总线错误。 文件大小为0,地图区域的大小为0。 给出无效的参数。 文件权限为只读,映射区域权限为读写。 发生了权限错误。 ftruncate ) )函数来扩大文件大小,文件必须是可写的。 open打开的文件至少是只读的,因为创建映射区域需要读取文件。 (O_RDWR ) open权限授予mmap,mmap权限授予指针。 可以在mmap创建地图区域后关闭文件描述符fd。 然后,访问文件,用地址访问。 offset必须是4k的整数倍。 (MMU映射最小单位为4k )不得越界访问申请的内存映射区域。 munmap释放的地址必须是mmap申请退回的地址。 映射区域的权限为MAP_PRIVATE,对内存所做的更改只对内存有效,位于没有响应的物理磁盘上。 对映射区域的访问权限为MAP_PRIVATE,对于open文件,您必须具有创建映射区域的读取权限。 最终不会写入物理磁盘。 映射区域的权限为MAP_SHARED,其中映射区域的权限=打开文件的权限。 map函数保险存储fd=open('filename ',O_RDWR ) mmap ) null,有效文件大小,PROT_READ|PROT_WRITE,MAP_SHARED,fmap

映射:可以重复读取。 血缘过程用指针通信; 非血缘过程重新映射通信。

匿名测绘血缘关系流程

//法通用intFD=open(/dev/zero )、O_RDWR ); 映射(null,4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0 ); ///dev/zero可以无限读///dev/null可以无限写在里面//法二Linuxmmap(null,4,PROT_READ|PROT_WRITE,map _ shared |

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。