execve は、動的に割り当てられた既存のメモリを破棄することを知っています。私の仕事は、バイナリを呼び出し、共有バッファを使用して通信する C プログラムを作成することです。ここで重要なのは効率です。バッファーのサイズは比較的小さいため、rpc やシステム コール (shmat など) の使用はできるだけ避けたいと考えています。
以前は、C プログラムでバッファを作成し、クローン (CLONE_VM フラグを設定) を使用してから、バイナリへの exec 呼び出しを行っていました。exec がイメージを置き換えるため、明らかにこれは機能しませんでした。
セットアップがどれほど効率的であるかについては心配していません。私の目標は、セットアップが完了したら、最も効率的な通信システムを構築することです。
同じアドレス空間内でバイナリを実行して、malloc されたメモリ領域を共有できる方法がない限り、shmget と shmat を使用します (実行されたバイナリ内から共有メモリをアタッチします)。
共有メモリを実現するためのより効率的な方法はありますか?