メモリー管理命令を次の表に示します。
| 命令 | 従来型の構文 | 自由形式構文 |
|---|---|---|
| 記憶域の割り振り | ALLOC (記憶域の割り振り) | %ALLOC (記憶域の割り振り) |
| 記憶域の解放 | DEALLOC (記憶域の解放) | |
| 記憶域の再割り振り | REALLOC (新しい長さでの記憶域の再割り振り) | %REALLOC (記憶域の再割り振り) |
| 変数のアドレスの入手 | %ADDR (変数のアドレスの検索) | |
| プロシージャーのアドレスの入手 | %PADDR (プロシージャー・アドレスの検索) | |
ALLOC 命令では、動的記憶域を割り振り、結果フィールド・ポインターを、 その記憶域を指し示すように設定します。 この記憶域は初期化されません。
REALLOC 命令は、結果フィールド・ポインターによって指し示されている 動的記憶域の長さを変更します。 新しい記憶域は、割り振られると、古い記憶域の値に初期化されます。 新しいサイズが古いサイズより小さい場合、データが切り捨てられます。 新しいサイズが古いサイズより大きい場合は、コピーされたデータの後の 記憶域は初期化されません。 古い記憶域は解放されます。 結果フィールド・ポインターは、新しい記憶域を指し示すように設定 されます。
DEALLOC 命令は、結果フィールド・ポインターが指している動的記憶域を 解放します。命令拡張 (N) が指定されている場合、割り振り解除が正常に完了した後、 ポインターは *NULL に設定されます。
記憶域は、活動化グループが終了すると暗黙に解放されます。 LR をオンに設定すると、モジュールによって割り振られた 動的記憶域は解放されませんが、動的記憶域を指し示すポインターは失われます。
ヒープ記憶域には、単一レベルとテラスペースの 2 つのタイプがあります。 制御仕様書で ALLOC キーワードを使用して、 メモリー管理命令が使用するヒープ記憶域のタイプを制御できます。
さまざまなタイプのヒープ記憶域について 詳しくは、「ILE 概念」(>SC41-5606) の記憶域管理に関する章を参照してください。
D Fld1 S 25A BASED(Ptr1)
D Fld2 S 5A BASED(Ptr2)
D Ptr1 S *
D Ptr2 S *
....
C ALLOC 25 Ptr1
C DEALLOC Ptr1
* この時点以降、Fld1 にはアクセスすることはできません。基底ポインター
* Ptr1 が、割り振られた記憶域を指さなくなっているからです。
C CALL 'SOMEPGM'
* 'SOMEPGM' への直前の呼び出し中に、いくつかの記憶割り振りが
* 行われている可能性があります。この場合、次の割り当てを行うことは
* 非常に危険です。これは、25 バイトの記憶域が
* 'a' によって埋め込まれるためです。その記憶域が現在何に使用されているかを
* 知ることができなくなります。
C EVAL Fld1 = *ALL'a'