当前位置: 技术问答>linux和unix
linux共享内存(share memory)与直接文件读取的区别
来源: 互联网 发布时间:2016-09-12
本文导语: 本帖最后由 freshman_fantom_ywj 于 2010-07-19 14:16:04 编辑 前提: linux下的共享内存编程,内存映射用的函数是mmap(void *addr,size_t len,int prot,int flags,int fd,off_t offset) 问题: 可以看到内存映射中需要的一个参数是int fd(文件的标识符)...
linux下的共享内存编程,内存映射用的函数是mmap(void *addr,size_t len,int prot,int flags,int fd,off_t offset)
问题:
可以看到内存映射中需要的一个参数是int fd(文件的标识符),可见函数是通过fd将文件内容映射到一个内存空间,我需要创建另一个映射来得到文件内容并统计或修改,这时我创建这另一个映射用的仍是mmap函数,它仍需要用到fd这个文件标识,那我不等于又重新打开文件读取文件里的数据
1.既然这样那同对文件的直接操作有什么区别呢?
2.映射到内存后通过映射的指针addr来修改内容的话是修改共享内存里的内容还是文件的内容呢?
3.解决上面2个问题,我还是想确切知道共享内存有什么用???
不了解的请不要回贴,宁愿没有一条精辟的回复,也不愿百来条路过的留言...谢谢您的合作~~~
|
1、访问共享内存的执行速度比直接访问文件的快N倍(N》10),这对于要求快速输入输出的场合非常有效。
2、通过addr修改的内容是修改的是共享内容中的内容。至于是否修改了文件中的内容,要看文件的类型。对于显示设备等文件来说,修改的也是文件的内容,因为他直接写到了显存中。对于普通文件,在close文件时,kernel会将数据更新到硬盘等存储设备中。
3、共享内存主要是为了提高程序的执行速度,方便多个进程进行快速的大数据量的交换。
2、通过addr修改的内容是修改的是共享内容中的内容。至于是否修改了文件中的内容,要看文件的类型。对于显示设备等文件来说,修改的也是文件的内容,因为他直接写到了显存中。对于普通文件,在close文件时,kernel会将数据更新到硬盘等存储设备中。
3、共享内存主要是为了提高程序的执行速度,方便多个进程进行快速的大数据量的交换。