gpt4 book ai didi

c++ - mmap的长度是字节数还是页数?

转载 作者:行者123 更新时间:2023-12-01 15:12:54 25 4
gpt4 key购买 nike

在函数中:

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
length中的参数 mmap代表字节数还是页数?另外,我可以像 mmap一样使用 malloc吗?有什么区别?

最佳答案

length参数以字节为单位。 Linux手册页没有明确说明这一点,但是POSIX spec说(强调我的意思):

The mmap() function shall establish a mapping between the address space of the process at an address pa for len bytes to the memory object represented by the file descriptor fildes at offset off for len bytes.



可以使用 mmap作为分配内存的一种方式(您将要使用 MAP_ANONYMOUS或映射 /dev/zero设备),但通常不能很好地直接替代 malloc:
  • 映射将始终以页面为单位进行(因此系统会将length舍入为页面大小的下一个倍数),因此对于小分配而言效率非常低。
  • 您不能将mmap返回的指针传递给reallocfree(改用mremapmunmap)。
  • munmap实际上将内存返回给系统,而free可能会将其分配给您的进程,并只是将其标记为可供将来调用malloc使用。这有利弊。一方面,如果您知道将来将不需要该内存,最好让系统将其取回。另一方面,每个mmap / munmap都需要一个系统调用,这相对较慢,而malloc可能能够在没有系统调用的情况下分配先前属于进程的free d内存。
  • 关于c++ - mmap的长度是字节数还是页数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62159538/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com