写点什么

解析 mmap 系统调用的所有的标志位

作者:linux大本营
  • 2023-04-21
    湖南
  • 本文字数:741 字

    阅读完需:约 2 分钟

当调用 mmap 系统调用时,可以提供一组标志,来控制内存映射行为。以下是相关标志位的解析:

  1. MAP_SHARED:将内存映射设置为共享。这意味着对映射区域的修改会影响到所有共享这个映射区域的进程。这个标志在多进程间通过内存共享进行通信时非常有用。

  2. MAP_PRIVATE:将内存映射设置为私有。这意味着对映射区域的修改只会影响到当前进程的私有映射。在多个进程之间不会共享这些修改。这可以用于将一个文件映射到多个进程的地址空间中,但每个进程都可以独立地修改它们自己的版本。

  3. MAP_ANONYMOUS:创建一个匿名映射。在这种情况下,内存中的数据不与文件系统中的文件相关联,而是由内核分配和管理,且该数据从未写入过磁盘。这种映射通常用于分配一些共享内存。

  4. MAP_FIXED:允许映射文件或内存区域的指定地址处。如果在指定的地址范围内已经有映射,则 mmap 调用将失败。使用这个标志允许程序在一个固定的位置分配内存。

  5. MAP_GROWSDOWN:允许堆栈向下扩展。这个标志通常在写入内核栈时使用。

  6. MAP_LOCKED:将映射区域置于内存中。这能够将内存页锁定在 RAM 中,以避免将其交换出去。这个标志要求进程有足够的特权以便实现该行为。

  7. MAP_NONBLOCK:如果没有足够的空闲内存页以满足映射请求,这个标志将导致 mmap 调用失败而不是等待直到内存页变得可用。

  8. MAP_NORESERVE:仅仅是通知内核预留内存空间,而不是分配实际的物理内存。在 Linux 系统中,这种情况可能导致由于内存锁定的内存不够,而导致系统崩溃的风险比较大。

  9. MAP_POPULATE:预读映射的页面,这样在之后读取这个区域的时候可以高效得多。在整个映射区域内进行读取操作会导致进程暂停,但这个标志能够防止暂停。

以上是 mmap 系统调用的不同标志的作用和解释。


相关技术视频教程:https://ke.qq.com/course/417774?flowToken=1013300

c/c++后端技术交流群:812855908

用户头像

还未添加个人签名 2020-11-26 加入

C/C++linux服务器开发群 812855908

评论

发布
暂无评论
解析mmap系统调用的所有的标志位_Linux_linux大本营_InfoQ写作社区