gpt4 book ai didi

c - Darwin 真的没有mremap吗?

转载 作者:太空狗 更新时间:2023-10-29 16:34:23 24 4
gpt4 key购买 nike

我正在尝试了解如何在 Mac 上重新映射内存映射文件(当我想扩展可用空间时)。

我看到我们在 Linux 世界的 friend 有 mremap 但我在我的 Mac 上的标题中找不到这样的功能。 /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h 具有以下内容:

  • mmap
  • mprotect
  • msync
  • 解锁
  • munmap
  • 但没有mremap

man mremap 证实了我的恐惧。

如果我想调整映射文件的大小,我目前必须使用 munmapmmmap,这涉及使所有加载的页面无效。一定会有更好的办法。当然可以?

我正在尝试编写可在 Mac OS X 和 Linux 上运行的代码。如果我不得不这样做,我可以让宏在每种情况下使用最好的功能,但我宁愿正确地做。

最佳答案

如果您需要缩小 map ,只需munmap您要删除的末尾部分即可。

如果你需要放大 map ,你可以用 mmap适当的偏移量 MAP_FIXED到旧 map 正上方的地址,但是你需要小心你不要映射到已经存在的其他东西上......

上面删除线下的文字是个糟糕的主意; MAP_FIXED 从根本上来说是错误的,除非您已经知道目标地址中的内容并且想要自动替换它。如果您尝试在地址范围空闲的情况下投机映射新内容,则需要将 mmap 与请求的地址一起使用,但没有 MAP_FIXED 和查看它是否成功并为您提供请求的地址;如果它成功但使用不同的地址,您将想要取消映射您刚刚创建的新映射并假设无法在请求的地址分配。

关于c - Darwin 真的没有mremap吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3521303/

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