メモリを動的に割り当てます。割り当てられたヒープ データをスレッドや呼び出し元のプログラムに関連付けることも可能です。
構文:
call "CBL_ALLOC_MEM" using mem-pointer
by value mem-size
by value flags
returning status-code
パラメーター:
|
呼び出しプロトタイプ使用時 (「説明の読み方」を参照)
|
PIC |
mem-pointer |
cblt-pointer |
USAGE POINTER。レベル 01 にする必要があります。 |
mem-size |
cblt-os-size |
pic x(4) comp-5 または pic x(8) comp-5 (64 ビットのネイティブのみ) |
flags |
cblt-os-flags |
pic x(4) comp-5 または pic x(8) comp-5 (64 ビットのネイティブのみ) |
status-code |
「説明の読み方」を参照
|
|
入力パラメーター:
- mem-size
- 割り当てるメモリのバイト数。
- flags
- 必要なメモリのタイプ。次のビットを設定できます。
ビット 0 |
共有のメモリとして割り当てます。 |
ビット 1 |
予約済み。ゼロに設定する必要があります。 |
ビット 2 |
いずれの呼び出し元プログラムからも独立したメモリとして割り当てます。ビット 3 を設定した場合は、呼び出し元のスレッドの終了とともに自動的に解放されます。ビット 3 を設定しない場合は、対応する実行単位が終了したときに解放されます。 |
ビット 3 |
スレッド固有のメモリとして割り当てます。ビット 2 を設定しない場合、混合言語環境の直接的または間接的な呼び出し元 COBOL プログラムがあるときは、呼び出し元プログラムがキャンセルされたときかスレッドが終了したときのいずれか早い時点で解放されます。 |
上記以外のビット |
予約済み。0 に設定する必要があります。 |
出力パラメーター:
- mem-pointer
- 割り当てられたメモリへのポインター。割り当てられたメモリは初期化されません。
説明:
割り当てられたメモリについて、特定値への初期化は実行されません。
この関数に割り当てられた共有メモリに対する更新には、アクセスの順序付けやランタイム システムからの保護は施されません。そのため、セマフォを使用して、データの整合性を維持する必要があります。
メモリがスレッドで割り当てられた場合は、呼び出し元のスレッドが終了すると解放されます。
非共有メモリの最大サイズはオペレーティング システムにのみ制限されます。
共有メモリの最大サイズはオペレーティング システムとランタイム システムに制限されます。最大サイズは、ランタイム チューナー shared_memory_segment_size を使用して設定できます。デフォルトは 65536 バイトで、最小は 8192 バイトです。
ビット 1 とビット 2 またはビット 3 は相互に排他的です。チェックで同時に設定されていることが検出されると、エラー 181 が返されます。呼び出し元のプログラム (混合言語環境の直接的または間接的な呼び出し元) が存在しない場合はビット 2 は無視されます。
CBL_ALLOC_MEM でビット 2 を設定せずに割り当てられた標準メモリは、直接的または間接的な呼び出し元である COBOL プログラムがある場合、割り当てを行ったプログラムが論理的または物理的にキャンセルされるとすべて解放されます。
このルーチンは、AMODE 指令を有効にしてコンパイルされたサブプログラム内では使用できません。