memory_strategy

メモリの管理方針を設定します。
制約事項: これらのチューナーは、ネイティブ COBOL でのみサポートされます。

構文:

>>-----set memory_strategy-=-strategy-specification------><

パラメーター:

strategy-specification 次の 1 つ以上のフラグを表す数値 (有効な組み合わせについては「説明」を参照)。
0x00000001
バイト チェック方針:各メモリ割り当ての前後にチェック バイトを付加します。
0x00000002
解放メモリ チェック方針:解放された最後の n 個のメモリ ブロックについて、以降の破損を監視します。n は、memory_free_check_size ランタイム チューナーを使用して設定した現在の値です。
0x00000004
再利用方針:破損を監視している解放メモリを、割り当て要求を満たすために使用できるようにします。
0x00000008
検証方針:コンテナー内で実行されるユーザー アプリケーションの実行の前後にメモリを検証します。
0x00000010
検証方針:コンテナー内の要求ハンドラー機能の実行の前後にメモリを検証します。
0x20000000
検証方針:各プログラムの入口および出口でメモリを検証します。
0x40000000
互換性方針:以前のバージョンのランタイム システムとの互換性を維持します。
0x80000000
検証方針:メモリ割り当て操作またはメモリ解放操作が行われるたびにメモリを検証します。

プロパティ:

デフォルト: 0x00000001(Windows) または 0x40000000(UNIX)
IDE での相当機能: [Project > Properties > Memory Management](Windows) または なし(UNIX)

[Service Interfaces > Properties > Enterprise Server Run-time Configuration > Memory Management]

説明:

このチューナーを使用すると、1 つまたは複数のメモリ管理方針を適用してプロセスを実行できます。たとえば、ランタイム システムによって行われる各メモリ割り当ての前後にチェック バイトを付加し、メモリ割り当て操作またはメモリ解放操作が行われるたびにメモリを検証するには、このチューナーを次のように設定します。

set memory_strategy=0x80000001

有効な方針の組み合わせは限られています。

  • バイト チェック、解放メモリ チェック、再利用、および検証は、自由に組み合わせることができます。
  • 互換性は検証とのみ組み合わせることができます。

バイト チェック メモリ管理方針が適用されている場合、ランタイム システムがメモリ ブロックの解放要求を受け取ると、チェック バイトが破損していないことをチェックしてからメモリが解放されます。破損が発生するのは、プログラムで他のメモリ ブロックの末尾を超えて現在のメモリ ブロックのヘッダーへの書き込みが行われた場合、または現在のメモリ ブロックの末尾を超えて書き込みが行われた場合です。ランタイム システムで破損が検出されると、ランタイム システム エラー COBRT252(Windows) または 252(UNIX) が発行されて、破損したメモリのメモリ ブロック アドレスおよびタイプが示されます。次に例を示します。

Execution error: file 'MYFILE'
error code: 252, pc=0, call=1, seg=0
252 Memory corruption detected (addr=00376068, type=136/1)
注: このタイプは、ランタイム システムで内部診断のために使用されます。

解放メモリ チェック方針が適用されている場合、ランタイム システムがメモリ ブロックの解放要求を受け取ると、メモリを解放する代わりに次の操作が行われます。

  • そのメモリ ブロックの内容を、あらかじめ定義されたチェック値にクリアします。
  • そのブロックへの参照を格納します。ランタイム チューナー memory_free_check_size によって定義されるブロック数の制限に達した場合は、次の操作が行われます。
    1. 格納されている最も古いエントリがポイントするメモリの内容を検証します。検証に失敗した場合 (必要なチェック値がメモリに含まれていない場合) は、ランタイム システム エラー COBRT252(Windows) または 252(UNIX) が発行されます。
    2. 格納されている最も古いエントリがポイントするメモリを解放します。

解放メモリ チェック方針を使用すると、メモリの断片化を引き起こして、プロセスに使用されるメモリが通常よりも大幅に増加する可能性があるため、注意してください。

解放メモリ チェック方針に再利用メモリ管理方針を組み合わせると、解放されたメモリを使用して新しい割り当て要求を満たすことができます。再利用方針が有効になっている場合、新しいメモリ ブロックの割り当てが必要になると、ランタイム システムはまず、解放されたメモリの領域で割り当て要求を満たせるかどうかをチェックします。解放されたメモリで割り当て要求を満たせるのは、解放されたメモリのサイズおよびタイプが割り当て要求のサイズおよびタイプと正確に一致する場合のみです。解放されたメモリで割り当て要求を満たせる場合は、まず、解放されたメモリの内容が検証されます。検証に失敗した場合 (必要なチェック値がメモリに含まれていない場合) は、ランタイム システム エラー COBRT252(Windows) または 252(UNIX) が発行されます。

互換性メモリ方針は、以前のバージョンのランタイム システムのメモリ管理との互換性を提供するために用意されています。この方針を指定すると、検証を除く他のすべての方針が無視されます。この方針では、メモリの検証や追跡は一切行われません。特定のメモリ ブロックを複数回解放しようとした場合に検出されるメモリ チェーン エラーも無視され、何の反応も発生しません。

検証メモリ管理方針を適用すると、以前にバイト チェック メモリ管理方針を使用して行われたすべてのメモリ割り当て、および解放されたすべてのメモリが、メモリ割り当て操作またはメモリ解放操作が要求されるたびに検証されます。さらに、オペレーティング システムで許可されていれば、オペレーティング システムのメモリ ヒープの検証チェックも行われます。この方針を使用すると、多数のメモリ割り当て操作およびメモリ解放操作を実行するアプリケーションでパフォーマンスが大幅に低下するため、注意してください。