メモリの管理方針を設定します。
制約事項: これらのチューナーは、ネイティブ COBOL でのみサポートされます。
構文:
>>-----set memory_strategy-=-strategy-specification------><
パラメーター:
strategy-specification |
次の 1 つ以上のフラグを表す数値 (有効な組み合わせについては「説明」を参照)。
- 0x00000001
- バイト チェック方針:各メモリ割り当ての前後にチェック バイトを付加します。
- 0x00000002
- 解放メモリ チェック方針:解放された最後の n 個のメモリ ブロックについて、以降の破損を監視します。n は、memory_free_check_size ランタイム チューナーを使用して設定した現在の値です。
- 0x00000004
- 再利用方針:破損を監視している解放メモリを、割り当て要求を満たすために使用できるようにします。
- 0x00000008
- 検証方針:コンテナー内で実行されるユーザー アプリケーションの実行の前後にメモリを検証します。
- 0x00000010
- 検証方針:コンテナー内の要求ハンドラー機能の実行の前後にメモリを検証します。
- 0x20000000
- 検証方針:各プログラムの入口および出口でメモリを検証します。
- 0x40000000
- 互換性方針:以前のバージョンのランタイム システムとの互換性を維持します。
- 0x80000000
- 検証方針:メモリ割り当て操作またはメモリ解放操作が行われるたびにメモリを検証します。
|
プロパティ:
デフォルト: |
0x00000001 |
IDE での相当機能: |
プロジェクトの Application.config ファイルを使用します。ソリューション エクスプローラーでファイルを右クリックして [Open] をクリックし、[Run-time Configuration] タブを選択します。 |
説明:
このチューナーを使用すると、1 つまたは複数のメモリ管理方針を適用してプロセスを実行できます。たとえば、ランタイム システムによって行われる各メモリ割り当ての前後にチェック バイトを付加し、メモリ割り当て操作またはメモリ解放操作が行われるたびにメモリを検証するには、このチューナーを次のように設定します。
有効な方針の組み合わせは限られています。
バイト チェック メモリ管理方針が適用されている場合、ランタイム システムがメモリ ブロックの解放要求を受け取ると、チェック バイトが破損していないことをチェックしてからメモリが解放されます。破損が発生するのは、プログラムで他のメモリ ブロックの末尾を超えて現在のメモリ ブロックのヘッダーへの書き込みが行われた場合、または現在のメモリ ブロックの末尾を超えて書き込みが行われた場合です。ランタイム システムで破損が検出されると、ランタイム システム エラー COBRT252 が発行されて、破損したメモリのメモリ ブロック アドレスおよびタイプが示されます。次に例を示します。
解放メモリ チェック方針が適用されている場合、ランタイム システムがメモリ ブロックの解放要求を受け取ると、メモリを解放する代わりに次の操作が行われます。
解放メモリ チェック方針を使用すると、メモリの断片化を引き起こして、プロセスに使用されるメモリが通常よりも大幅に増加する可能性があるため、注意してください。
解放メモリ チェック方針に再利用メモリ管理方針を組み合わせると、解放されたメモリを使用して新しい割り当て要求を満たすことができます。再利用方針が有効になっている場合、新しいメモリ ブロックの割り当てが必要になると、ランタイム システムはまず、解放されたメモリの領域で割り当て要求を満たせるかどうかをチェックします。解放されたメモリで割り当て要求を満たせるのは、解放されたメモリのサイズおよびタイプが割り当て要求のサイズおよびタイプと正確に一致する場合のみです。解放されたメモリで割り当て要求を満たせる場合は、まず、解放されたメモリの内容が検証されます。検証に失敗した場合 (必要なチェック値がメモリに含まれていない場合) は、ランタイム システム エラー COBRT252 が発行されます。
互換性メモリ方針は、以前のバージョンのランタイム システムのメモリ管理との互換性を提供するために用意されています。この方針を指定すると、検証を除く他のすべての方針が無視されます。この方針では、メモリの検証や追跡は一切行われません。特定のメモリ ブロックを複数回解放しようとした場合に検出されるメモリ チェーン エラーも無視され、何の反応も発生しません。
検証メモリ管理方針を適用すると、以前にバイト チェック メモリ管理方針を使用して行われたすべてのメモリ割り当て、および解放されたすべてのメモリが、メモリ割り当て操作またはメモリ解放操作が要求されるたびに検証されます。さらに、オペレーティング システムで許可されていれば、オペレーティング システムのメモリ ヒープの検証チェックも行われます。この方針を使用すると、多数のメモリ割り当て操作およびメモリ解放操作を実行するアプリケーションでパフォーマンスが大幅に低下するため、注意してください。