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