Myr*_*ria 5 macos shared-memory memory-mapped-files
在UNIX世界中,创建由RAM或页面文件而不是磁盘文件支持的文件映射对象的标准方法是调用shm_open。这将创建一个具有名称的内存映射,并返回可传递给的文件句柄mmap。
问题在于它创建了一个名称。如果我可以创建一个匿名内存映射,那就太好了。这将解决两个问题:
shm_unlink之后立即调用shm_open是一种可能,但是这会留下一个小窗口,在该窗口中突然终止会将该对象保留到下次重新启动为止。在Linux中,有memfd_create解决此问题的方法。同样,Windows允许传递一个空名称CreateFileMappingW来创建匿名映射。
Mac OS是否具有等效功能?
您可以使用 创建一个文件open,然后使用 立即将其从文件系统中删除unlink。文件描述符将保持打开状态,并且文件本身将保持活动状态,直到其最后一个描述符关闭。如果您需要在进程之间共享文件描述符,则此方法有效,并且它似乎可以解决您列出的两个问题。
或者,传递MAP_ANON和MAP_SHARED来mmap创建一个共享内存区域,该区域不受任何文件支持,但在此进程及其所有分叉之间共享。但是,与任何内存映射一样,它会在 上被删除exec。
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |