%alloc
私は、使用してメモリを割り当てるRPGLEコードをいくつか生産していdealloc
ます。プログラマーは結果としてメモリ リークが発生しないことを確認できるはずですが、そうでない場合はどうなるか心配です。
私の質問は、プログラマーが失敗してメモリ リークが発生した場合、このメモリはいつ回収されるのでしょうか? プログラムがメモリを離れたときですか、それともジョブが終了したときですか?
%alloc
私は、使用してメモリを割り当てるRPGLEコードをいくつか生産していdealloc
ます。プログラマーは結果としてメモリ リークが発生しないことを確認できるはずですが、そうでない場合はどうなるか心配です。
私の質問は、プログラマーが失敗してメモリ リークが発生した場合、このメモリはいつ回収されるのでしょうか? プログラムがメモリを離れたときですか、それともジョブが終了したときですか?
ILE RPG Programmer's Reference Guide から:
活動化グループが終了すると、ストレージは暗黙的に解放されます。LR をオンに設定しても、モジュールによって割り当てられたヒープ ストレージは解放されませんが、ヒープ ストレージへのポインターは失われます。
RPG プログラムが独自の活動化グループにある場合、メモリーはプログラムの終了時に解放されます。もちろん、ジョブが終了すると、アクティベーション グループも終了します。したがって、ジョブを終了すると、常に割り当てられたメモリがクリーンアップされます。
実際、活性化グループのメカニズムを研究する必要があります。メモリ リークが発生する可能性がありますが、マシンに損傷を与えることはありません (私は as400 が大好きです)。ただし、iSeries ジョブ内の他のプログラムに損害を与える可能性があります (注意: as400 の経験がない場合は、as400 ジョブのメカニズムについて読む必要があります)。
自分のジョブ内で (もちろんプログラム内で) 起動グループを管理することから始めると、別の種類のメモリ領域を作成できます。いくらかのオーバーヘッドが必要ですが (グループに名前を付ける必要があります)、強力なものを使用できる安全な環境が得られます。
私はこれらの組み込み関数に精通していませんが、通常、ジョブが終了すると (または対話型の場合はユーザーがログオフします)、すべてがクリーンアップされます。答えが見つからない場合は、答えがわかっている可能性のある別のコミュニティを紹介できます。