12.4. 使用 mmap ()系统调用将文件或设备映射到内存


对于实时系统上的大型内存分配,内存分配(malloc)方法使用 mmap () 系统调用来查找可寻址的内存空间。您可以通过在 标志 参数中设置 MAP_LOCKED 来分配和锁定内存区域。

作为 mmap() 根据页分配内存,同一页面中没有两个锁定,这可以防止双锁定或单一锁定问题。

先决条件

  • 有 root 权限。

流程

  • 映射特定进程地址空间:

    #include <sys/mman.h>
    #include <stdlib.h>
    
    void *alloc_workbuf(size_t size)
    {
     void *ptr;
    
     ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
                MAP_PRIVATE | MAP_ANONYMOUS | MAP_LOCKED, -1, 0);
    
     if (ptr == MAP_FAILED)
      return NULL;
    
     return ptr;
    }
    
    void
    free_workbuf(void *ptr, size_t size)
    {
     munmap(ptr, size);
    }

验证

  • 在成功时,实时 mmap () 调用会返回一个指向映射区域的指针。0n 错误,它会返回 MAP_FAILED 值,并设置 errno 来指示错误。
  • 当成功时,实时 munmap () 调用会返回 0。0n 错误,它返回 -1 并设置 errno 来指明错误。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部