mmap做什么?

问题描述 投票:10回答:2

这行代码有什么作用?

mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
c mmap
2个回答
10
投票

它请求n字节内存的私有的,可写的匿名映射。

  • 私有映射意味着它不与其他进程共享(例如,在fork()之后,子进程和父进程将具有独立映射);
  • 匿名映射意味着它不受文件支持。

在这种情况下,它本质上是请求一块n字节的内存,所以大致相当于malloc(n)(尽管它必须用munmap()而不是free()释放,并且它将是页面对齐的)。它还要求存储器可写但不要求它是可读的,但是可写和不可读存储器通常不是底层硬件支持的组合。当单独请求PROT_WRITE时,POSIX允许实现提供也可以读取和/或执行的内存。


8
投票

man mmap将在这里帮助你。

它在进程的虚拟地址空间中创建内存映射。它正在创建一个匿名映射,这就像使用malloc来分配n字节的内存。

参数是:

  • NULL - 内核将为映射选择一个地址
  • n - 映射的长度(以字节为单位)
  • PROT_WRITE - 页面可能会被写入
  • MAP_ANON | MAP_PRIVATE - 映射不受文件支持,写入映射的更新对进程是私有的
  • -1 - 文件描述符;未使用,因为映射不受文件支持
  • 0 - 在文件中偏移开始映射 - 再次,未使用,因为映射不受文件支持
© www.soinside.com 2019 - 2024. All rights reserved.