30

So, I understand that if you need some dynamically allocated memory, you can use malloc(). For example, your program reads a variable length file into a char[]. You don't know in advance how big to make your array, so you allocate the memory in runtime.

I'm trying to understand when you would use mmap(). I have read the man page and to be honest, I don't understand what the use case is.

Can somebody explain a use case to me in simple terms? Thanks in advance.

4

2 回答 2

41

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

mmap也可以用于匿名映射。这种映射没有文件支持,基本上是对一块内存的请求。如果这听起来与 相似malloc,那么您是对的。事实上,大多数实现malloc会在内部使用匿名mmap来提供大的内存区域。

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

于 2012-08-23T15:45:29.727 回答
7

每当您需要读取/写入固定大小的数据块时,使用 mmap 将磁盘上的数据文件简单地映射到内存并直接访问它比分配内存、读取文件、访问数据要简单得多(也更快),可能将数据写回磁盘,并释放内存。

于 2012-08-23T15:44:39.670 回答