ENTMF 

ALLOCATE 文

ALLOCATE 文は、動的記憶域を割り当てる。

一般形式

構文規則

  1. data-name-1 は、連絡節で定義された 01 レベルまたは 77 レベルの項目でなければならない。
  2. data-name-1 を次にすることはできない。
    • 部分参照
    • 無制限の表を含む集団項目
  3. integer-1 は、24 または 31 の値を持つ符号なし整数とする。
  4. data-name-2 は、USAGE IS POINTER として定義する必要がある。
  5. data-name-2 は修飾または添え字付けすることができる。
  6. arithmetic-expression-1 が整数と等しくない場合、結果は次の整数に切り上げられる。
  7. arithmetic-expression-1 がゼロまたは負の値に等しい場合、data-name-2 は定義済みのアドレス NULL に設定される。

一般規則

  1. data-name-1 を指定した場合:
    • 割り当てられる記憶域の量は、data-name-1 を保持するために必要なバイト数になる。data-name-1 のデータ記述項に OCCURS DEPENDING ON 句を含む下位項目が含まれている場合、レコードの最大長が割り当てられる。
    • データ項目のアドレスは取得された記憶域のアドレスに設定される。これは、SET ADDRESS OF data-name-1 TO address と同じ効果になる。
    • RETURNING 指定は省略できるが、指定した場合、data-name-2 にそのアドレスが格納される。
  2. arithmetic-expression-1 CHARACTERS を指定した場合:
    • arithmetic-expression-1 は、割り当てる記憶域のバイト数を指定する。
    • RETURNING data-item-2 を指定する必要があり、このアドレスは取得された記憶域のアドレスに設定される。
  3. LOC 指定は、AMODE 指令が設定されている場合に ALLOCATE 文によって返されるメモリ アドレスのタイプを制御する。
    • LOC 24 - メモリ アドレスは 24 ビット形式で格納される。この形式は、メインフレーム上の「境界の下位」の記憶域と互換性がある。
    • LOC 31 - メモリ アドレスは 31 ビット形式で格納される。この形式は、メインフレーム上の「境界の上位」の記憶域と互換性がある。
  4. LOC を指定しない場合は次のようになる。
    • AMODE"24" が有効な場合は常に LOC 24 を指定したと見なされる。
    • AMODE"31" が有効な場合は常に LOC 31 を指定したと見なされる。
  5. INITIALIZED 指定を記述した場合、割り当てられる記憶域が初期化される。省略した場合、割り当てられる記憶域の内容は不定となる。
  6. arithmetic-expression-1 と INITIALIZED 指定の両方を記述した場合は、記憶域のすべてのバイトがバイナリのゼロに初期化される。
  7. data-name-1 と INITIALIZED 指定の両方を記述した場合は、記憶域は次の場合と同様に初期化される。INITIALIZE data-name-1 WITH FILLER ALL TO VALUE THEN TO DEFAULT
  8. 指定した量の記憶域を割り当てに使用できる場合:
    • RETURNING 指定を記述した場合、data-name-2 で参照されるデータ項目はその記憶域のアドレスに設定される。
    • data-name-1 を指定した場合、data-name-1 で参照される 01 または 77 LINKAGE SECTION データ項目のアドレスはその記憶域のアドレスに設定される。これは、次と同じ効果になる。SET ADDRESS OF data-name-1 TO address-of-obtained-storage
  9. 指定した量の記憶域を割り当てに使用できない場合:
    • RETURNING 指定を記述した場合、data-name-2 で参照されるデータ項目は定義済みのアドレス NULL に設定される。
    • data-name-1 を指定した場合、data-name-1 で参照される 01 または 77 LINKAGE SECTION データ項目のアドレスは定義済みのアドレス NULL に設定される。
  10. 割り当てられた記憶域は、FREE 文を使用して明示的に解放するか、実行ユニットが終了するか、いずれかが発生するまで維持される。