我一直在寻找 malloc 和 mmap 系统调用之间的区别。这两者之间的确切区别是什么?推荐哪个?
3 回答
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() 指向堆上的内存。
mmap()
实际上并没有将文件加载到内存中(不使用任何内存,但会占用地址空间),而是malloc()
从堆中分配内存。
我的建议是malloc()
用于小物体和mmap()
大物体。