所以,我知道如果你需要一些动态分配的内存,你可以使用malloc()。例如,您的程序将可变长度文件读入char []。你事先并不知道你的数组有多大,所以你要在运行时分配内存。
我试图理解你何时使用mmap()。我已经阅读了手册页,说实话,我不明白用例是什么。
有人可以用简单的方式向我解释一个用例吗?提前谢谢。
答案 0 :(得分:33)
mmap
可以用于一些事情。首先,文件支持的映射。而不是使用malloc
分配内存并读取文件,而是将整个文件映射到内存中而不显式读取它。现在,当您从该内存区域读取(或写入)时,操作会透明地对文件执行操作。你为什么想做这个?它允许您使用OS提供的分页机制轻松处理大于可用内存的文件。即使对于较小的文件,mmapping也会减少内存副本的数量。
mmap
也可用于匿名映射。此映射不由文件支持,基本上是对一块内存的请求。如果这听起来与malloc
类似,那你就是对的。实际上,malloc
的大多数实现都将在内部使用匿名mmap
来提供大内存区域。
另一个常见用例是让多个进程将同一文件映射为共享映射以获取共享内存区域。该文件不必实际写入磁盘。 shm_open
是实现这一目标的便捷方式。
答案 1 :(得分:5)
每当您需要读取/写入固定大小的数据块时,使用mmap简单地将数据文件映射到内存并直接访问内存,而不是分配内存,读取文件,访问更简单(也更快)数据,可能会将数据写回磁盘,并释放内存。