メモリを共有する

提供: RAD Studio
移動先: 案内検索

メモリを管理する:インデックス への移動


ここでは、メモリ マネージャを使用してメモリを共有する方法について説明します。

Win32 および Win64 では、長い文字列や動的配列をパラメータや関数の結果として渡すルーチン(直接渡すかレコードやオブジェクトにネストさせるかを問わない)が DLL からエクスポートされる場合は、その DLL とその DLL のクライアント アプリケーション(またはクライアント DLL)はすべて同じメモリ マネージャを共有する必要があります。 あるアプリケーションや DLL が System.New または System.GetMem で割り当てたメモリを、別のモジュールが System.Dispose または System.FreeMem を呼び出して解放する場合にも、同じことが当てはまります。 アプリケーションとそのライブラリの間でメモリ マネージャを共有する手段として、ShareMem および SimpleShareMem という 2 つの相互排他的なメソッドがあります。

Posix では、アプリケーションと共有ライブラリは既に、malloc、free、realloc などの System ライブラリを共用しています。

メモ: DLL がアプリケーションに静的にリンクされている場合、その DLL はアプリケーションの前に初期化されます。 SimpleShareMem 共有メソッドがアプリケーションと DLL の両方で使われている場合、アプリケーションは DLL のメモリ マネージャを使用します。 メモリ マネージャの設定を変更したり、メモリ マネージャの統計を取得できるのは、メモリ マネージャを共有化しているモジュールだけです。 それ以外のモジュールから設定を変更しても無効です。 そのモジュールのメモリ マネージャが使われている訳ではないからです。 ただし、滅多に必要にはなりませんが、メモリ マネージャの共有メカニズムを手動で制御することもできます。

ShareMem を使用するには:

  1. プログラムやライブラリが使用する句の先頭に ShareMem を記述します。 モジュールは、外部の BORLNDMM.DLL ライブラリに依存するようになります。 これによって、割り当てられたメモリを動的に共有できるようになります。
  2. BORLNDMM.DLL は、ShareMem を使用するアプリケーションや DLL と一緒に配置します。 アプリケーションまたは DLL が ShareMem を使用すると、そのメモリ マネージャは BORLANDMM.DLL 内のメモリ マネージャによって置き換えられます。

SimpleShareMem を使用するには:

  1. 各モジュール内のプログラムやライブラリが使用する句の先頭に SimpleShareMem を記述します。 最初に初期化されたモジュールが、メモリ マネージャを共有化するモジュールになります。 それより後に初期化されたモジュールはすべて、最初のモジュールのメモリ マネージャを使用します。
  2. 最初に初期化されたモジュールが、メモリ マネージャを共有化するモジュールになります。 それより後に初期化されたモジュールはすべて、最初のモジュールのメモリ マネージャを使用します。

関連項目