Memory 理解mmap

Memory 理解mmap,memory,operating-system,Memory,Operating System,我一直在寻找malloc和mmap系统调用之间的区别。这两者的确切区别是什么?推荐哪一种 mmap()实际上并不将文件加载到内存中(不使用任何内存,但它会占用地址空间),而是malloc()从堆中分配内存 我的建议是使用malloc() malloc()从堆中分配内存 mmap()是的API 在大多数情况下,它们不是彼此的替代,因此关于哪个更好的问题实际上没有多大意义。mmap()是一个系统级地址,用于从磁盘上的文件映射数据。使用mmap()可以引用磁盘上的任何文件,就像它是一个简单的字节[]数

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

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


我的建议是使用
malloc()

  • malloc()
    从堆中分配内存
  • mmap()
    是的API
  • 在大多数情况下,它们不是彼此的替代,因此关于哪个更好的问题实际上没有多大意义。

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

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

    • 当您处理的数据太大以至于无法容纳时 在主内存(RAM)中,可以使用mmap()访问部分数据 物理存储在磁盘上的文件的 减少RAM使用并有效处理大于RAM的数据

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

    malloc()为您提供一个指向堆(RAM中)中存储临时对象的空间的指针


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

    此信息不准确。mmap确实将文件加载到内存中——它将内核页面映射到用户空间。关于堆栈溢出有很多答案,详细说明了它是如何工作的。或者阅读史蒂文斯的“高级Unix编程”。