当需要在OS X 10.4及以上的操作系统中,从子进程向父进程传递大量数据(200kb+)时,我研究了Unix上的共享内存,特别是System V和POSIX共享内存机制。随后我意识到,可以使用mmap()函数与MAP_ANON和MAP_SHARED标志(如果不介意创建一个普通文件,也可以只使用MAP_SHARED标志)来完成类似的工作。
我的问题是,有没有理由不直接使用mmap()函数?它似乎更简单,内存仍然是共享的,并且如果使用MAP_ANON,则不必创建实际的文件。我可以在父进程中创建文件,然后fork()和exec()子进程,在子进程中使用它。
第二个问题是,什么情况下这种方法不足以满足需求,必须使用SysV或POSIX共享内存机制?请注意,我打算使用管道进行同步,因为我需要用于其他通信,即父进程通过管道请求数据,子进程将其写入共享内存,并通过管道响应已准备好。没有多个读者或写者参与。可移植性不是首要考虑因素。