当前位置:首页 > 内存 > 正文

mmap在堆上分配内存

  • 内存
  • 2024-05-28 16:43:09
  • 2278

一、mmap权限是什么

mmap权限将文件或其他对象映射到进程的地址空间中,实现文件磁盘地址与进程虚拟地址空间中虚拟地址的映射关系。认识到这样的映射关系后,进程就可以使用指针来读写这块内存,系统会自动将脏页写回对应的文件磁盘。

mmap将文件或其他对象映射到内存中。文件被映射到多个页面,如果文件的大小不是所有页面大小的总和,则删除最后一页上未使用的空间。mmap在系统调用用户空间映射中发挥着重要作用。相反,使用内核空间修改该区域也直接反映用户空间,从而允许不同进程之间的文件共享。

设备操作

mmap操作提供了一种允许用户程序直接访问设备内存的机制。与用户空间和内核空间相比,该机制复制空间。数据集中在一起,更加高效。它常用于要高性能的应用中。mmap映射的内存必须是页面大小的整数倍。面向流的设备无法实现mmap。

以上内容参考百度-mmap百科


二、Linux的mmap文件内存映射机制是什么?

共享内存允许两个或多个进程共享给定的存储区域。由于数据不需要来回复制,因此它是进程间通信最快的机制。共享内存可以使用普通文件映射mmap()(特殊情况也可以使用匿名映射)或使用SystemV的共享内存机制来实现。应用程序的接口和原理很简单,但内部机制很复杂。为了提供更安全的通信,它通常与信号量等同步机制结合使用。mmap的机制是在磁盘上创建一个文件,并在每个进程的内存中开辟一块单独的空间进行映射。如果有多个进程,它们不会消耗太多的实际物理内存(主存)。shm机制:每个进程的共享内存直接映射到真实的物理内存。

存储在实际的硬盘上,但实际存储并未反映在主存中。优点:存储容量可以很大(比主存大)。缺点:进程间读写速度比主存慢;

存储在物理内存(主存)中,实际内存大小直接反映在主存中。优点:进程间访问速度(读和写)比磁盘快。缺点:存储容量不能很大(大于主存)。从使用角度来看:如果分配的存储容量较小,则使用它。shm,如果内存大,则使用mmap。