gpt4 book ai didi

c - 什么时候使用 mmap MAP_FIXED?

转载 作者:太空狗 更新时间:2023-10-29 15:16:05 26 4
gpt4 key购买 nike

我一直在查看 mmap 函数的不同标志,即 MAP_FIXED、MAP_SHARED、MAP_PRIVATE。有人可以向我解释 MAP_FIXED 的用途吗?无法保证首先会使用地址空间。

最佳答案

MAP_FIXED 是用于内存映射的 dup2,它的用处与 dup2 用于文件描述符的情况完全相同:当您需要时执行replace 操作,以原子方式重新分配资源标识符(在 MAP_FIXED 的情况下为内存范围,在 dup2 的情况下为 fd)到引用一个新资源而不可能发生竞争,如果您首先释放旧资源然后尝试为新资源重新获得它,它可能会被重新分配给其他东西。

例如,以加载共享库(通过动态加载程序)为例。它至少包含三种类型的映射:程序代码和可执行文件中的只读数据的只读+执行映射,初始化数据的读写映射(也来自可执行文件,但通常具有不同的相对偏移量)和读写零初始化匿名内存(对于 .bss)。将它们创建为单独的映射是行不通的,因为它们必须位于相对于彼此的固定相对地址。因此,您首先在没有 MAP_FIXED 的情况下对所需的总长度进行虚拟映射(此映射的类型无关紧要),只是为了在内核分配的位置保留足够范围的连续地址,然后您可以使用 MAP_FIXED 根据需要使用您需要创建的三个或更多映射来映射此范围部分的顶部。

此外,请注意,将 MAP_FIXED 与硬编码地址或随机地址一起使用总是一个错误。使用 MAP_FIXED 的唯一正确方法是替换现有映射,该映射的地址是由先前成功调用 mmap 而没有 MAP_FIXED 分配的,或者在您认为可以安全地替换整个页面的其他方式。这方面也完全类似于dup2;当调用者在目标 fd 上还没有打开文件并打算替换它时,使用 dup2 总是一个错误。

关于c - 什么时候使用 mmap MAP_FIXED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com