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


对于实时系统中的大型内存分配,内存分配(malloc)方法使用 mmap () 系统调用来查找内存空间。您可以通过在 flags 参数中设置 MAP_LOCKED 来分配和锁定内存区域。因为 mmap () 以页为基础分配内存,因此它会避免在同一页面中出现两个锁定,这样可防止双锁或单解锁问题。

先决条件

  • 您在系统上具有 root 权限。

流程

  • 映射特定的 process-address 空间:

    #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);
    }
    Copy to Clipboard Toggle word wrap

验证

  • mmap () 函数成功完成时,它会将指针返回到映射区域。出错时,它会返回 MAP_FAILED 值,并设置 errno 来指示错误。
  • munmap () 函数成功完成时,它返回 0。出错时,它会返回 -1,并设置 errno 来指示错误。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat