在UNIX世界中,创建由RAM或页面文件而不是磁盘文件支持的文件映射对象的标准方法是调用shm_open
。这将创建一个带有名称的内存映射,并返回一个可以传递给mmap
的文件句柄。
问题在于它创建了一个名称。如果我可以创建匿名内存映射会很好。这将解决两个问题:
shm_unlink
之后立即调用shm_open
是一种可能性,但是这留下了一个小窗口,在该窗口中突然终止会使对象离开,直到下次重新启动。在Linux中,有memfd_create
来解决此问题。同样,Windows允许将空名称传递给CreateFileMappingW
以创建匿名映射。
是否有Mac OS的等效产品?
答案 0 :(得分:1)
您可以使用open
创建文件,然后立即使用unlink
将其从文件系统中删除。文件描述符将保持打开状态,文件本身将保持活动状态,直到其最后一个描述符关闭。如果您需要在进程之间共享文件描述符,这可以解决您列出的两个问题。
或者,将MAP_ANON
和MAP_SHARED
传递给mmap
会创建一个共享内存区域,该区域不受任何文件的支持,但会在此进程及其所有分支之间共享。但是,与任何内存映射一样,它会在exec
上删除。