デフォルト・メモリー・マネージャー
デフォルト・メモリー・マネージャーは、パフォーマンスとメモリー所要量のバランスを取ることを試行する汎用のメモリー・マネージャーです。デフォルト・メモリー・マネージャーは、大部分のアプリケーションに対して適切なパフォーマンスを提供しながら必要な追加メモリー量を最小化しようとします。
メモリー・マネージャーは、カルテシアン・バイナリー・サーチ・ツリー内のノードとしてヒープ内のフリー・スペースを維持します。このデータ構造では、ツリーによってサポートされるブロック・サイズ数に制限はなく、考えられる広い範囲のブロック・サイズを使用することができます。
割り振り
size = ROUND (n+16, 16)
例えば、サイズ 37 を割り振ると、ROUND(37+16, 16) のサイズ、すなわち 64 バイトが必要になります。
必要なサイズ以上のツリー・ノードは、ツリーから除去されます。検出されたブロックが必要なサイズを超えている場合、そのブロックは、2 つのブロック、すなわち必要なサイズのブロックと残りのブロックに分割されます。2 番目のブロックは、フリー・ツリーに戻されて将来の割り振りに使用されます。最初のブロックは呼び出し元に戻されます。
フリー・ツリー内で十分なサイズのブロックが検出されない場合、次の処理が発生します。
- ヒープが拡張されます。
- 獲得された拡張のサイズを持つブロックがフリー・ツリーに追加されます。
- 割り振りは上記の説明のように継続します。
割り振り解除
free 操作によって割り振り解除されたメモリー・ブロックは、ツリーのルートに戻されます。新規ノードの挿入ポイントまでのパスに沿った各ノードが検査されて、挿入されるノードに隣接していないかどうかが調べられます。隣接している場合は、2 つのノードはマージされ、新たにマージされたノードはツリー内に再配置されます。隣接ブロックが見付からない場合は、ノードは、ツリー内の適切な場所に挿入されます。隣接ブロックをマージすると、ヒープのフラグメント化を減らすことができます。
再割り振り
- 要求されたサイズの新規ブロックが割り振られます。
- データが元のブロックから新しいブロックに移動されます。
- 元のブロックが free 操作によってフリー・ツリーに戻されます。
- 新しいブロックが呼び出し元に戻されます。
再割り振り済みブロックのサイズが元のブロックのサイズより小さいときに、サイズの差異が少ない場合、元のブロックが戻されます。そうでない場合、再割り振り済みブロックのサイズが元のブロックのサイズより小さいならば、ブロックは分割されて、残りの部分がフリー・ツリーに戻されます。
デフォルト・メモリー・マネージャーの使用可能化
QIBM_MALLOC_TYPE=DEFAULT
QIBM_MALLOC_DEFAULT_OPTIONS=options
デフォルト・メモリー・マネージャーにユーザー指定の構成オプションを指定するには、QIBM_MALLOC_DEFAULT_OPTIONS=options を設定します。ここで、options は、1 つ以上の構成オプションをブランクで区切ったリストです。
QIBM_MALLOC_TYPE=DEFAULT 環境変数が指定されているときに _C_Quickpool_Init() 関数が呼び出された場合は、環境変数の設定が _C_Quickpool_Init() 関数より優先され、_C_Quickpool_Init() 関数は、代替ヒープ・マネージャーが既に使用可能にされていることを示す値 -1 を戻します。
構成オプション
以下の構成オプションを使用できます。
MALLOC_INIT:N
このオプションを使用して、割り振られたメモリーの各バイトを指定値に初期化することを指定できます。値 N は、0 から 255 までの範囲の整数を表します。
このオプションは、デフォルトでは使用可能になりません。
FREE_INIT:N
このオプションを使用して、解放されたメモリーの各バイトを指定値に初期化することを指定できます。値 N は、0 から 255 までの範囲の整数を表します。
このオプションは、デフォルトでは使用可能になりません。
CHUNK_REUSE_MAXSZ:N
このオプションを使用して、再使用可能なチャンクの最大サイズ (バイト) を指定できます。値 N は 0 より大きい整数を表します。
このオプションは、デフォルトでは使用可能になりません。
任意の数のオプションを任意の順序で指定することができます。ブランクが、構成オプションを区切るために有効な唯一の区切り文字です。各構成オプションは、1 回だけ指定できます。1 つの構成オプションが複数回指定された場合は、最後のインスタンスのみが適用されることになります。構成オプションが無効な値で指定された場合、その構成オプションは無視されます。

ADDENVVAR ENVVAR(QIBM_MALLOC_DEFAULT_OPTIONS) LEVEL(*JOB) REPLACE(*YES) VALUE('')
ADDENVVAR ENVVAR(QIBM_MALLOC_DEFAULT_OPTIONS) LEVEL(*JOB) REPLACE(*YES)
VALUE('MALLOC_INIT:255 FREE_INIT:0 CHUNK_REUSE_MAXSZ:5242880')
ADDENVVAR ENVVAR(QIBM_MALLOC_DEFAULT_OPTIONS) LEVEL(*JOB) REPLACE(*YES)
VALUE('CHUNK_REUSE_MAXSZ:5242880')
1 番目の例は、デフォルトの構成値を示します。2 番目の例は、指定されているすべてのオプションを示します。3 番目の例は、5 MB (5242880 バイト) 以上の空のチャンクはシステムに即時に返されることを示します。
関連機能
デフォルト・メモリー・マネージャー用の構成オプションを有効にするために、または指定するために使用可能な関数はありません。環境変数サポートを使用する必要があります。
関連情報