「102. 16MB のヒープ・サイズを簡単に拡張するには」で紹介したテクニックは
コンパイル時にコンパイラーに *TERASPACE
を指定するものであったが
今回はさらに柔軟で洗練されたテクニックを紹介しよう。
サービス・プログラム (*SRVPGM
) を作成するときには、
ストレージ・モデルに *INHERIT
を指定しておくと、そのサービス・プログラムをバインドして
利用する上位のプログラムのストレージ・モデルに従う形式のオブジェクトとして生成することができる
というものである。
つまり上位のプログラムがストレージ・モデル(*SNGLVL
) (通常はこのシングルである)として
コンパイルされたものであれば、このサービス・プログラムも実行時には *SNGLVL
として動作し、
上位のプログラムが テラ・スペース(*TERASPACE
)としてコンパイルされているのであれば、
実行時には このサービス・プログラムも *TERASPACE
として動作する、というものである。
従ってサービス・プログラムが大量のデータを扱う可能性のある場合は *INHERIT
で
コンパイルしておけば、どちらの場合でも柔軟に対応することができる。
ただし *INHERIT
は CRTCMOD
と CRTSRVPGM
のどちらも指定する必要がある。
CRTCMOD MODULE(OBJLIB/MYSRVPGM) SRCFILE(MYSRCLIB/QCSRC) AUT(*ALL) TERASPACE(*YES *TSIFC) STGMDL(*INHERIT)
CRTSRVPGM SRVPGM(OBJLIB/MYSRVPGM) MODULE(QTEMP/MYSRVPGM) SRCFILE(MYSRCLIB/QSRVSRC)
ACTGRP(*CALLER) AUT(*ALL) STGMDL(*INHERIT)