C400

105. ヒープ・サイズ拡張に柔軟に対応するには ?

102. 16MB のヒープ・サイズを簡単に拡張するには」で紹介したテクニックは

コンパイル時にコンパイラーに *TERASPACE を指定するものであったが

今回はさらに柔軟で洗練されたテクニックを紹介しよう。

サービス・プログラム (*SRVPGM) を作成するときには、

ストレージ・モデルに *INHERIT を指定しておくと、そのサービス・プログラムをバインドして

利用する上位のプログラムのストレージ・モデルに従う形式のオブジェクトとして生成することができる

というものである。

つまり上位のプログラムがストレージ・モデル(*SNGLVL) (通常はこのシングルである)として

コンパイルされたものであれば、このサービス・プログラムも実行時には *SNGLVL として動作し、

上位のプログラムが テラ・スペース(*TERASPACE)としてコンパイルされているのであれば、

実行時には このサービス・プログラムも *TERASPACE として動作する、というものである。

従ってサービス・プログラムが大量のデータを扱う可能性のある場合は *INHERIT

コンパイルしておけば、どちらの場合でも柔軟に対応することができる。

ただし *INHERITCRTCMODCRTSRVPGM のどちらも指定する必要がある。

 

【例】
ソースコード

 

CRTCMOD の例
CRTCMOD MODULE(OBJLIB/MYSRVPGM) SRCFILE(MYSRCLIB/QCSRC) AUT(*ALL) TERASPACE(*YES *TSIFC)
     STGMDL(*INHERIT)
CRTSRVPGM の例
CRTSRVPGM SRVPGM(OBJLIB/MYSRVPGM) MODULE(QTEMP/MYSRVPGM) SRCFILE(MYSRCLIB/QSRVSRC)
     ACTGRP(*CALLER) AUT(*ALL) STGMDL(*INHERIT)