3つのソースファイルが再生中にあります。mempool, foo1, foo2
です。
ヘッダーのファイルで、機能が「どのように見えるか」、どのように呼び出されるかを記述したファイルです。あなたがfoo1
やfoo2
のいずれかをコンパイルすると
、mempool.o
からオブジェクトコードは、は、静的にそれらにをリンクされます。
これを実行すると、2つの完全に別々のプログラムになります。どちらもオブジェクトコードと同じビットが含まれています。
2つのプログラムを実行すると、それぞれに専用のヒープが割り当てられます。どちらもメモリプール管理に使用されるものと同じオブジェクトコードを含んでいますが、それらはお互いに無関係です。
の場合プログラムが実際に「メモリを共有する」ようにするには、名前付きの共有メモリセグメントを使用する必要があります。 (shmget
など)、であり、その共有リソースを見つけて開いて適切に使用するために、メモリプールマネージャコードを設計する必要があります。再度、両方のプログラムには、メモリプールマネージャのオブジェクトコードの独自の独立したコピーが含まれます。
(ヒント:「これはすでに行われてきた。」あなたは、GitHubのような場所に、代わりにカスタムメイドの実装に着手するの、自分でこれを行う完全なライブラリを見つけることができます。)
を=== 追加注:動的にロードライブラリ:
私も第三可能性が存在すること、ついでに、コメントしたいと思います。
このアプローチをとると、実行時にオブジェクトコードがアプリケーションによってロードされ、は、それを使用するアプリケーションのオブジェクトコードの一部になりません。代わりに、それらにアクセスできるようになります。さらに、オペレーティングシステムは共有を認識しており、インスタンスが共有されていると認識している可能性があります。 の場合、メモリ割り当ての共通セットは、単一の共有インスタンスによって "所有される"ことができます。オペレーティングシステム(およびバージョン「現代と現代の現代」、たとえばMS-Windowsの ...)がこの特定の点で異なります。
広すぎますが、組み込みシステムには標準的なライブラリが用意されておらず、 'malloc'&friendsを使用するのは非常に悪い考えです。それがメモリプールを使用する理由です... – Olaf
foo1.cとfoo2.cは同じプログラムか2つの別々のプログラムにコンパイルされていますか? – kkrambo
これらは個別に別々のプログラムです。 –