这行代码有什么作用?
mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
答案 0 :(得分:10)
它请求n
字节内存的私有可写匿名映射。
fork()
之后,子级和父级将具有独立映射); 在这种情况下,它本质上是请求n
个字节的内存块,因此大致相当于malloc(n)
(尽管必须使用munmap()
而不是free()
释放它},它将是页面对齐的)。它还要求存储器可写但不要求它是可读的,但是可写和不可读存储器通常不是底层硬件支持的组合。当单独请求PROT_WRITE
时,POSIX允许实现提供也可以读取和/或执行的内存。
答案 1 :(得分:8)
man mmap
会帮助你。
它在进程的虚拟地址空间中创建内存映射。它正在创建一个匿名映射,这就像使用malloc
来分配n
个字节的内存。
参数是:
NULL
- 内核将选择映射的地址n
- 映射的长度(以字节为单位)PROT_WRITE
- 可以撰写网页MAP_ANON | MAP_PRIVATE
- 映射不受文件支持,写入映射的更新对进程是私有的-1
- 文件描述符;未使用,因为映射不受文件支持0
- 启动映射的文件中的偏移量 - 再次,未使用,因为映射不受文件支持