你什么时候使用mmap

Ste*_*lsh 23 c mmap

所以,我知道如果你需要一些动态分配的内存,你可以使用malloc().例如,您的程序将可变长度文件读入char [].您事先并不知道制作阵列有多大,因此您需要在运行时分配内存.

我想知道你何时使用mmap().我已经阅读了手册页,说实话,我不明白用例是什么.

有人可以用简单的术语向我解释一个用例吗?提前致谢.

Gre*_*sev 35

mmap可用于一些事情.首先,文件支持的映射.malloc您可以将整个文件映射到内存中而无需显式读取,而不是使用内存和读取文件来分配内存.现在,当您从该内存区域读取(或写入)时,操作会透明地对文件执行操作.你为什么想做这个?它允许您使用OS提供的分页机制轻松处理大于可用内存的文件.即使对于较小的文件,mmapping也会减少内存副本的数量.

mmap也可以用于匿名映射.此映射不由文件支持,基本上是对一块内存的请求.如果这听起来很相似malloc,那你就是对的.事实上,大多数实现malloc将在内部使用匿名mmap来提供大的内存区域.

另一个常见用例是让多个进程将同一文件映射为共享映射以获取共享内存区域.该文件不必实际写入磁盘. shm_open是实现这一目标的便捷方式.


Mar*_*ett 6

无论何时需要读取/写入固定大小的数据块,使用mmap简单地将数据文件映射到内存并直接访问内存而不是分配内存,读取文件,访问数据,可能会将数据写回磁盘,并释放内存.