mmap做什么?

11 c mmap

mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
Run Code Online (Sandbox Code Playgroud)

嗨...我想弄清楚上面代码的含义......?

caf*_*caf 11

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

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

在这种情况下,它本质上是请求一块n字节的内存,因此大致相当于malloc(n)(尽管它必须被释放munmap()而不是free()).它还要求内存可写但不可读,但底层硬件通常不支持这样的请求.


Ric*_*arn 9

man mmap 会帮助你.

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

参数是:

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