Linux システムで 2 つの同一のバイナリを同時に実行しています (コマンド ライン引数が異なるため、異なる処理を実行しています)。あるプロセスでは、オブジェクトを共有メモリ領域に memcopy します。別のプロセスで、正しいサイズのオブジェクトを取得し、void*
それstatic_cast
へのポインターを として取得し、元の型のポインターへのポインターを取得します。
これは安全と考えられますか? オブジェクトは必ずしも POD ではありません。
Linux システムで 2 つの同一のバイナリを同時に実行しています (コマンド ライン引数が異なるため、異なる処理を実行しています)。あるプロセスでは、オブジェクトを共有メモリ領域に memcopy します。別のプロセスで、正しいサイズのオブジェクトを取得し、void*
それstatic_cast
へのポインターを として取得し、元の型のポインターへのポインターを取得します。
これは安全と考えられますか? オブジェクトは必ずしも POD ではありません。
trivially_copyable でないオブジェクトを memcpy できないため、安全ではありません。たとえばstd::vector
、 memcopy を呼び出して移動/コピーすることはできず、多くの問題が発生する可能性があります。ただし、オブジェクトを共有メモリ セグメントに構築することはできます。ブーストインタープロセスを見ることを強くお勧めします。使用しなくても、例を見れば何が可能かがわかります: http://www.boost.org/doc/libs/1_63_0/doc/html/interprocess/sharedmemory betweenprocesses.html。