【发布时间】:2016-05-09 09:53:21
【问题描述】:
why mmap is better than read and write
我的问题如下: 在某些情况下人们使用 mmap 而不是从文件中读取。一种这样的代码是:
*mapping = mmap(NULL, *mapping_size, PROT_READ | PROT_WRITE,
MAP_POPULATE | MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
上面的代码试图分配大量的内存。 我想知道在这种情况下 mmap 是做什么的,它是如何工作的。每个人都在谈论 mmap wrt 文件的优势。但是这些 fd 设置为 -1 的代码很常见。这是什么意思,这样做有什么好处。?我希望有人能解决我的疑问,由于模棱两可,我无法完全问出来。
谢谢
【问题讨论】:
-
来自man:如果指定了 MAP_ANONYMOUS(或 MAP_ANON),则某些实现要求 fd 为 -1,便携式应用程序应确保这一点。
-
感谢您的回复。 Man 说“映射没有任何文件支持;它的内容被初始化为零。fd 和 offset 参数被忽略;但是,如果指定了 MAP_ANONYMOUS(或 MAP_ANON),某些实现要求 fd 为 -1,并且便携式应用程序应该确保这一点。自内核 2.4 起,Linux 才支持将 MAP_ANONYMOUS 与 MAP_SHARED 结合使用。”我想知道我们使用匿名的任何实际案例!!?
-
用非常压缩的话来说:每次您不想将内存连接到磁盘上的文件时。
-
是的,是的。但我想知道 fd=-1 的情况,不涉及文件!
-
当平台特定的手册说它必须是-1时是必需的。
标签: c linux linux-kernel mmap