COBOL プログラムを実行するときは、プログラムおよびプログラムで使用されるデータは仮想記憶域にあります。COBOL で使用するストレージは、16MB 境界より下でも 16MB 境界より上でも構いませんが、2GB の境界を超えないようにしてください。このストレージをアドレッシングするときは、24 ビットおよび 31 ビットの 2 つのアドレッシング・モードが使用可能です。
24 ビット・アドレッシングを使用して、16MB 境界より下のストレージをアドレッシングすることができます (ただし、16MB 境界より上のアドレッシングはできません)。31 ビット・アドレッシングを使用すると、16MB 境界より上と 16MB 境界より下のどちらのストレージでもアドレッシングできます。31 ビット・アドレッシングを使用して、無制限のストレージ をアドレッシングできます。したがって、16MB 境界より上と 16MB 境界より下の両方を含む、プログラムで使用可能なすべてのストレージをアドレッシングできます。
Enterprise COBOL は、z/OS の 64 ビットの仮想アドレッシング機能を直接には利用しませんが、31 ビット・アドレッシング・モードまたは 24 ビット・アドレッシング・モードで実行している COBOL アプリケーションは、64 ビット z/OS システムで完全にサポートされます。
アドレッシング・モード (AMODE) は、ユーザーのプログラムによってどのハードウェア・アドレッシング・モードがサポートされるかを示す属性です。24 ビット・アドレッシング、31 ビット・アドレッシング、24 ビットまたは 31 ビット・アドレッシングのいずれかを示す属性があります。この属性はそれぞれ AMODE 24、AMODE 31、または AMODE ANY になります。オブジェクト・プログラム、ロード・モジュール、および実行プログラムにはそれぞれ AMODE 属性があります。Enterprise COBOL オブジェクト・プログラムはすべて AMODE ANY です。
常駐モード (RMODE) は、仮想記憶域のどこにプログラムが常駐するかを示すプログラム・ロード・モジュールの属性です。16MB 境界の下、16MB 境界の下または上の 2 つの属性があります。この属性は RMODE 24 または RMODE ANY です。
Enterprise COBOL は、言語環境プログラムのサービスを使用して、実行時に使用されるストレージを制御します。 したがって、COBOL コンパイラー・オプションおよび言語環境プログラムのランタイム・オプションは、単独でまたは組み合わせによって、プログラムとデータの AMODE 属性および RMODE 属性に影響を与えます。
RMODE オプションと RENT オプションは、プログラムの RMODE 属性を決定します。
| RMODE コンパイラー・オプション | RENT コンパイラー・オプション | RMODE 属性 |
|---|---|---|
| RMODE(AUTO) | NORENT | RMODE 24 |
| RMODE(AUTO) | RENT | RMODE ANY |
| RMODE(24) | RENT または NORENT | RMODE 24 |
| RMODE(ANY) | RENT または NORENT | RMODE ANY |
リンク・エディットに関する考慮事項: COBOL が生成するオブジェクト・コードに属性 RMODE 24 がある場合には、RMODE 24 でオブジェクト・コードをリンク・エディットする必要があります。 COBOL が生成するオブジェクト・コードに属性 RMODE ANY がある場合には、RMODE ANY または RMODE 24 でオブジェクト・コードをリンク・エディットすることができます。
16MB 境界より上のストレージで割り振られたパラメーターを AMODE 24 サブプログラムに渡してはなりません。31 ビット・アドレッシング・モードで実行しているプログラムの場合は、WORKING-STORAGE データおよびパラメーター・リストを強制的に境界より下に配置して、AMODE 24 で実行しているプログラムにデータを渡してください。
再入可能プログラムの場合は、DATA コンパイラー・オプションおよび HEAP ランタイム・オプションによって、データ域のストレージ (WORKING-STORAGE SECTION や FD レコード域など) を 16MB 境界より下から獲得するのか、制限のないストレージから獲得するのかを制御します。プログラムが 16MB 境界より上の仮想記憶域アドレスで 31 ビット・アドレス方式で実行される場合は、プログラムを RENT または RMODE(ANY) でコンパイルしなければなりません。DATA オプションは、NORENT を指定してコンパイルされたプログラムに影響を与えません。
ランタイム・オプション HEAP(,,BELOW) を指定すると、 DATA コンパイラー・オプションの効果はなくなります。WORKING-STORAGE SECTION データ域のストレージは、 16MB 境界より下から割り振られます。 しかし、HEAP(,,ANYWHERE) をランタイム・オプションとして指定すると、データ域のストレージは、プログラムを DATA(24) コンパイラー・オプションを使用してコンパイルした場合は 16MB 境界より下から割り振られ、DATA(31) コンパイラー・オプションを使用してコンパイルした場合は、制限のないストレージから割り振られます。
LOCAL-STORAGE データ項目のロケーションは、STACK ランタイム・オプションおよびプログラムの AMODE によって制御されます。LOCAL-STORAGE データ項目は、STACK(,,ANYWHERE) ランタイム・オプションが有効で、プログラムが AMODE 31 で実行されているときは、制限のないストレージで獲得されます。それ以外の場合、LOCAL-STORAGE は 16MB 境界より下で獲得されます。DATA コンパイラー・オプションは、LOCAL-STORAGE データのロケーションに影響を与えません。
DATA コンパイラー・オプションは、動的データ域 (WORKING-STORAGE、FD レコード域、およびパラメーター・リスト) のストレージ獲得方法に影響を与えるだけでなく、EXTERNAL データ用のストレージをどこから獲得するかにも影響を与えることがあります。EXTERNAL データに必要なストレージは、次の条件が満たされる場合には、制限のないストレージから獲得されます。
これ以外の場合はすべて、EXTERNAL データ用のストレージは 16MB 境界より下から獲得されます。ALL31(ON) ランタイム・オプションを指定するためには、実行単位内のすべてのプログラムが 31 ビット・アドレッシング・モードで実行可能でなければなりません。
DATA コンパイラー・オプションは、QSAM ファイルの入出力バッファーをどこに獲得するかにも影響する場合があります。QSAM ファイルのバッファーの割り振りおよび DATA コンパイラー・オプションについては、以下の関連参照情報を参照してください。
関連概念
AMODE 切り替え
言語環境プログラム プログラミング・ガイド
(ヒープ・ストレージの概要: AMODE の考慮事項)
関連タスク
サブプログラムの使用
データの共用
関連参照
QSAM ファイル用のバッファーの割り振り
DATA
RENT
RMODE
パフォーマンスに関連するコンパイラー・オプション
言語環境プログラム プログラミング・リファレンス (HEAP, STACK, ALL31)
MVS プログラム管理: ユーザーズ・ガイドおよび解説書