mmap 中的长度是字节数还是页数?
Is the length in mmap a number of bytes or a number of pages?
在函数中:
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
mmap
中length
的参数是表示字节数还是页数?另外,我可以像malloc
类似地使用mmap
吗?有什么区别?
length
参数以字节为单位。 Linux 手册页没有明确说明这一点,但 POSIX 规范说(强调我的(:
mmap(( 函数应在 len字节的地址 pa 处的进程地址空间与 len字节偏移量关闭处的文件描述符 fildes 表示的内存对象之间建立映射。
可以使用mmap
作为分配内存的一种方式(您需要使用MAP_ANONYMOUS
或映射/dev/zero
设备(,但它通常不是malloc
的良好直接替代品:
-
映射将始终以页面单位进行(因此系统将
length
舍入到页面大小的下一个倍数(,因此对于较小的分配来说效率非常低。 -
不能将
mmap
返回的指针传递到realloc
或free
(改用mremap
和munmap
(。 -
munmap
实际上将内存返回到系统,而free
可能会将其分配给您的进程,并仅将其标记为可供将来调用malloc
使用。 这有利有弊。 一方面,如果您知道将来不需要该内存,那么让系统将其恢复是很好的。 另一方面,每个 mmap/munmap 都需要一个系统调用,这相对较慢,而malloc
可能能够在没有系统调用的情况下分配已经属于您的进程的先前free
d 内存。
相关文章:
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 基于字节数组生成静态范围整数值
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 字节数组初始化会导致 DirectX 崩溃
- 使用 swig 追加到字节数组
- C++ 替换字节数组中项的顺序
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 将字节数组转换为多维数组
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- 如何将带有空字符的字节数组馈送到 std::iostream 中?
- C++字节数组到整数
- 将字符串转换为无符号字符数组/字节数组
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- mmap 中的长度是字节数还是页数?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 从 UTF-8 字节数组创建字符串?
- ReadFile() 读取的字节数少于其参数中的指定值