C/400

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)