2

我一直在寻找 malloc 和 mmap 系统调用之间的区别。这两者之间的确切区别是什么?推荐哪个?

4

3 回答 3

6

mmap() 是从磁盘上的文件映射数据的系统级地址。使用 mmap() 您可以引用磁盘上的任何文件,就好像它是一个简单的 byte[] 数组一样。它可以用于以下任何应用。

  • 每当您从磁盘上的文件中请求数据时,它都会加载到 RAM 中。如果您有两个单独的程序需要来自同一个文件的数据,则可以使用 mmap() 从磁盘直接访问该文件,从而减少多余的 RAM 使用。

  • 当您处理的数据太大以至于无法放入主内存 (RAM) 时,您可以使用 mmap() 访问物理存储在磁盘上的文件数据的一部分,从而再次减少 RAM有效地使用和处理大于 RAM 的数据。

请注意,在 64 位系统中 mmap() 可以寻址磁盘上的任何位置,但不能在 32 位系统中!因为在 32 位系统中,最大可寻址空间限制为 2^32 - 1 (4GB),但在 64 位系统中,可以寻址数 PB 的位置。

malloc() 为您提供指向堆(在 RAM 中)的一些空间的指针,以存储临时对象。

mmap() 和 malloc() 之间唯一的相似之处是它们都返回指针。但是 mmap() 指向磁盘上的内存,而 malloc() 指向堆上的内存。

于 2013-03-13T16:28:47.123 回答
2

mmap()实际上并没有将文件加载到内存中(不使用任何内存,但会占用地址空间),而是malloc()从堆中分配内存。

我的建议是malloc()用于小物体和mmap()大物体。

于 2013-03-04T14:11:33.597 回答
1

它们非常不同:

  1. malloc()从堆中分配内存;
  2. mmap()内存映射文件的 API 。

在大多数情况下,它们不是相互替代的,所以关于哪个更好的问题并没有多大意义。

于 2013-03-04T14:15:21.170 回答