在UNIX世界中,创建一个由RAM或页面文件支持而不是磁盘文件的文件映射对象的标准方法是调用
问题在于它会创建一个名称。如果我能创建一个匿名内存映射就好了。这将解决两个问题:
1. 它将避免同一程序的两个实例互相干扰映射文件的问题。 2. 如果程序崩溃或突然终止,它将不会留下共享内存对象。立即调用
在Linux中,有
在Mac OS中是否有相应的解决方案?
shm_open
。这将创建一个带名称的内存映射,并返回一个文件句柄,您可以将其传递给mmap
。问题在于它会创建一个名称。如果我能创建一个匿名内存映射就好了。这将解决两个问题:
1. 它将避免同一程序的两个实例互相干扰映射文件的问题。 2. 如果程序崩溃或突然终止,它将不会留下共享内存对象。立即调用
shm_unlink
是一种可能性,但这会在下一次重启之前留下一个小窗口,使得突然终止会在对象周围留下。在Linux中,有
memfd_create
来解决这个问题。同样,在Windows中,可以将空名称传递给CreateFileMappingW
来创建一个匿名映射。在Mac OS中是否有相应的解决方案?
MAP_ANON
和fd=-1
调用mmap()
函数 - 但以往我经常犯错 :-) - Mark Setchellvm_*
函数可以创建内存映射,然后将它们设置为可继承和/或传递给其他进程。 - Ken Thomases