私たちのアプリは、.soファイルとしてロード可能な外部のサードパーティ提供の構成(カスタムの運転/意思決定機能を含む)に依存しています。
独立して、共有メモリのチャンクを使用して外部CGIモジュールと連携し、揮発性状態のほとんどすべてが保持されるため、外部モジュールはそれを読み取り、必要に応じて変更できます。
問題は、CGIモジュールが.soからの永続的な構成データを大量に必要とし、メインアプリがデータを利用可能にするために2つのメモリ領域間でまったく不要なコピーを大量に実行することです。アイデアは、共有オブジェクト全体を共有メモリにロードし、CGIで直接利用できるようにすることです。問題は:どうやって?
- dlopenとdlsymには、SOファイルをロードする場所を割り当てるための機能はありません。
- shmat()を試しました。一部の外部CGIが実際に共有メモリにアクセスしようとするまでしか機能しないようです。次に、ポイントされたエリアは、共有されなかったかのようにプライベートに表示されます。多分私たちは何か間違ったことをしているのですか?
- .soを必要とする各スクリプトに.soをロードすることは問題外です。構造のサイズは非常に大きく、呼び出しの頻度に関連しています(一部のスクリプトは、ライブ更新を生成するために1秒に1回呼び出されます)。これは、組み込みアプリであるため、使用できません。
- .soをshmに単純にmemcpy()することも適切ではありません。一部の構造体とすべての関数は、ポインターを介して相互接続されています。