メモリを共有する

提供: 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. 最初に初期化されたモジュールが、メモリ マネージャを共有化するモジュールになります。それより後に初期化されたモジュールはすべて、最初のモジュールのメモリ マネージャを使用します。

関連項目

コード サンプル