[操作系统]fy姥爷的考试(第四周) mmap相关

mmap是一种内存映射文件的方法,即讲一个文件或者其他对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟空间中一段虚拟地址的一一对应关系,函数原型如下

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

这里写图片描述
实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动会写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。

好处:read,write等函数本身涉及两次的数据拷贝,一次是用户空间和内核空间的数据拷贝,另外一次是内核空间和硬件之间的数据拷贝,如果设备拷贝的数据量很小,那么read,write两次数据拷贝的过程对系统的影响几乎没有,如果设备的数据量非常大,比如说显卡那么对系统的性能影响非常大。 
而mmap则减少一次内存拷贝,只有用户空间的内存拷贝。正是因为减少了从Linux页缓存到用户空间的缓冲区的这一次拷贝,所以mmap大大提高了性能。

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/mman.h>
#include<stdio.h>
#include<stdlib.h>
int main(){
    int fd = open("my_data.dat",O_RDONLY);
    size_t len = lseek(fd,0,SEEK_END);
    char *p = mmap(NULL,len,PROT_READ,MAP_SHARED,fd,0);

    printf("%s\n",p);
    return 0;

}
//Hello World!
//
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值