OS X 10.4以降では、IPCを使用して子プロセスから親プロセスに大量のデータ(200kb以上)を渡す必要があるため、Unixの共有メモリ、特にSystemVとPOSIXの共有メモリメカニズムを調べました。次に、mmap()をMAP_ANONフラグとMAP_SHAREDフラグとともに使用して、同様のことを実行できることに気付きました(または、通常のファイルが作成されてもかまわない場合は、MAP_SHAREDフラグと一緒に使用できます)。
私の質問は、mmap()だけを使用しない理由はありますか?はるかに単純なようで、メモリは引き続き共有され、MAP_ANONを使用する場合は実際のファイルを作成する必要はありません。親プロセスでファイルを作成してから、子プロセスでfork()およびexec()を実行し、それを子プロセスで使用できます。
質問の2番目の部分は、このアプローチでは不十分であり、SysVまたはPOSIX共有メモリメカニズムを使用する必要がある理由は何でしょうか。
Note that I was planning on doing synchronization using pipes that I need for other communication, i.e. the parent asks for data over the pipe, the child writes it to shared memory, and responds over the pipe that its ready. No multiple readers or writers involved. Portability is not a priority.