(57)【特許請求の範囲】
【請求項１】
プログラムのメモリ使用量を出力するメモリ管理装置において、
ソースプログラムの翻訳（以下、翻訳という）時に当該翻訳する処理の中でソースプログラムを探索してメモリ割り付けあるいはメモリ解放であって、使用メモリ量の出力の有無の指示の情報を受け取り、有のときにメモリ使用量を外部に出力するライブラリ（以下、ライブラリという）の呼び出しが出現したときに、翻訳開始時にユーザからのメモリ使用量出力指示の翻訳オプションが指定されていたときに、上記ライブラリに当該メモリ使用量出力の有の指示の情報を渡す命令を埋め込んで翻訳して実行可能形式のプログラムを生成する指示手段を備えたことを特徴とするメモリ管理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムのメモリ使用量を出力するメモリ管理装置および記録媒体に関するものである。
【０００２】
【従来の技術】
プログラム実行中にメモリがどれだけ使用されているかを知りたい場合がある。例えばプログラムに無駄なメモリを割り付けたままにしている部分がないかをデバッグしたり、プログラムが最大でどの程度のメモリを必要とするかを調査する必要がある。この場合、従来は、ユーザがプログラムをその都度変更して、プログラム自身が使用したメモリを計算して出力するようにしていた。
【０００３】
【発明が解決しようとする課題】
このため、プログラムが使用するメモリ量を調査する都度、当該プログラム自身を変更してメモリ量を計算して出力させるように変更して実行しなければならず、非常に手間が必要となると共にプログラム自身を熟知していないとプログラムを変更して使用メモリ量を求められないという問題があった。
【０００４】
本発明は、これらの問題を解決するため、翻訳オプションで使用メモリ量出力指示を指定して翻訳しておき、翻訳オプションおよび実行オプションに従い実行時にメモリ使用量を出力し、プログラムのメモリ割り付けおよび解放のトレースを自動的かつ簡易に出力することを目的としている。
【０００５】
【課題を解決するための手段】
図１および図４を参照して課題を解決するための手段を説明する。
図１において、使用メモリ量出力指示手段１は、翻訳時に翻訳オプションに従い、ソースプログラムにメモリ使用量出力指示を通知する命令を埋め込んで翻訳などさせるものである。
【０００６】
使用メモリ量出力手段２は、実行オプションに従い、実行可能形式のプログラムの実行時にメモリ使用量を出力などするものである。
次に、動作を説明する。
【０００７】
使用メモリ量出力指示手段１が翻訳時にソースプログラムの先頭から探索してメモリ割り付けあるいはメモリ解放のライブラリ呼び出しが出現したときにライブラリにメモリ使用量出力指示を通知する命令を埋め込んで翻訳して実行可能形式のプログラムを生成し、実行時に実行可能形式のプログラムの先頭から探索してメモリ割り付けあるいはメモリ解放のライブラリ呼び出しが出現したときに上記メモリ使用量出力指示が有のときにメモリ使用量を出力させるようにしている。
【０００８】
この際、使用メモリ量出力指示手段１が翻訳開始時にメモリ使用量指示の翻訳オプション指定されていたときに、メモリ使用量出力指示を通知する命令を埋め込んで翻訳するようにしている。
【０００９】
また、使用メモリ量出力手段２が予め翻訳時にソースプログラムの先頭から探索してメモリ割り付けあるいはメモリ解放のライブラリ呼び出しが出現したときにライブラリにメモリ使用量出力指示を通知する命令を埋め込んで翻訳した実行可能形式のプログラムの実行時に、先頭から探索して、メモリ割り付けあるいはメモリ解放ライブラリ呼び出しが出現したときは、メモリ使用量出力指示有りのときにメモリ使用量を出力するようにし、終了処理ライブラリ呼び出しが出現したときは、メモリ使用量出力指示有のときはメモリ使用量を集計したサマリを出力するようにしている。
【００１０】
また、使用メモリ量出力手段２が実行開始時にメモリ使用量出力の実行オプション指定されていたときに、メモリ使用量出力指示が無くてもメモリ使用量およびメモリ使用量を集計したサマリを出力するようにしている。
【００１１】
従って、翻訳オプションで使用メモリ量出力指示を指定して翻訳しておき、当該翻訳オプションあるいは実行オプションで実行時にメモリ使用量を出力することにより、プログラムのメモリ割り付けおよび解放のトレースを自動的かつ簡易に出力することが可能となる。
【００１２】
【発明の実施の形態】
次に、図１から図７を用いて本発明の実施の形態および動作を順次詳細に説明する。
【００１３】
図１は、本発明の翻訳時の処理フローチャートを示す。
図１において、Ｓ１は、翻訳オプションの指定を行う。これは、例えば図３に示すように、翻訳オプションとして、原始プログラム（ソースプログラム）と翻訳時指定のメモリ使用量出力指示オプションなどを指定する。
【００１４】
Ｓ２は、原始プログラムを中間言語に変換する。これは、原始プログラムを形態素解析および構文解析して内部処理をし易くした中間言語に変換する（以下実際は中間言語をもとに各種翻訳時の処理を実行するが、説明を簡単にするために当該中間言語を単にプログラムと呼ぶ）。尚、ユーザが翻訳オプションなどを指定する対象となるものは原始プログラム（ソースプログラム）であり、コンパイラが命令を埋め込む対象となるものは中間言語である。
【００１５】
Ｓ３は、メモリ割り付け／開放ライブラリの呼び出しが現れたか判別する。例えばＦＯＲＴＲＡＮ言語では後述する図２のＡＬＬＯＣＡＴＥ文やＤＥＡＬＬＯＣＡＴＥ文、Ｃ言語では標準関数のＭＡＬＬＯＣやＦＲＥＥが現れたか判別する。ＹＥＳの場合には、Ｓ４に進む。ＮＯの場合には、メモリの割り付けあるいは解放でないので、Ｓ６に進む。
【００１６】
Ｓ４は、使用メモリ量通知オプションの指定ありか判別する。これは、Ｓ１の翻訳開始時に翻訳オプションで指定された例えば原始プログラムであるか判別する。ＹＥＳの場合には、Ｓ５に進む。ＮＯの場合には、翻訳オプションで指定された原始プログラムではないと判明したので、Ｓ６に進む。
【００１７】
Ｓ５は、メモリ割り付け／解放ライブラリにオプション情報を渡すための命令を埋め込む。これは、Ｓ３のＹＥＳ、Ｓ４のＹＥＳでメモリ割り付けあるいはメモリ解放のライブラリ呼び出しであり、かつ使用メモリ量通知オプションが指定されている例えばプログラム（中間言語）と判明したので、本発明に係るメモリ割り付けおよびメモリ解放のライブラリにオプション情報（使用メモリ量を出力する原始プログラムである旨、使用メモリ量の出力の有無の指示などの情報）を渡すための命令当該プログラム（中間言語）に埋込み、後述するＳ７で翻訳させて実行時にライブラリにオプション情報が渡る仕組みを当該翻訳時に設定しておく。
【００１８】
Ｓ６は、プログラムの終わりか判別する。ＹＥＳの場合には、Ｓ７で実行可能プログラムを生成（翻訳）し、終了する。ＮＯの場合には、Ｓ３に戻り、次のプログラムについて繰り返す。
【００１９】
以上によって、翻訳オプションの指定に従い、原始プログラム中にメモリ割り付けやメモリ解放のライブラリ呼び出しが見つかったときに、メモリ割り付けやメモリ解放のライブラリにオプション情報を渡す命令を埋め込んで翻訳して実行可能形式のプログラムを生成する。これにより、実行時にメモリ割り付けやメモリ解放のライブラリにオプション情報が渡り、当該メモリ割り付けやメモリ解放を実行するライブラリで後述する図４に示すように、使用メモリ量やそのサマリを出力させることが可能となる。
【００２０】
図２は、本発明の原始プログラムの例を示す。これは、既述した図１のＳ２の原始プログラム（ソースプログラム）の例であって、ＦＯＲＴＲＡＮ言語のメモリ割り付けおよびメモリ解放のライブラリを呼び出す文の例である。ここでは、
・ＡＬＬＯＣＡＴＥ  （ａ，１００）
がメモリ割り付け文であって、右側に記載したように、ａはｒｅａｌ型（正の整数値）であり、ｒｅａｌ型１個の大きさは４バイトで、ここでは、１００個であり、合計１００×４＝４００バイトのメモリを割り付けるという意味を持つ文である。同様に、ＤＥＡＬＬＯＣＡＴＥ  （ａ）はａのために割り付けた４００バイトを解放するという意味を持つ文である。
【００２１】
図３は、本発明の翻訳オプションの指定方法例を示す。これは、既述した図１のＳ１の翻訳オプションの指定方法の例である。ここでは、
・ｆｒｔ  ａ．ｆ  −Ｋ×
というコマンド形式で翻訳オプションを翻訳時に利用者がキーボードなどからキー入力して指定する。この翻訳オプション中の先頭の“ｆｒｔ”は翻訳オプションを表すコマンドである。“ａ．ｆ”は本発明の使用メモリ量出力指示の命令を埋め込む対象の原始プログラム名である。“−Ｋ×”は翻訳時指定のメモリ使用量出力指示オプションであって、各種メモリ使用量出力指示の情報を設定するものである。
【００２２】
図４は、本発明の実行時の処理フローチャートを示す。これは、既述した図１の翻訳時の処理フローチャートに従い翻訳された実行可能形式のプログラムを実行する時に、メモリ使用量を出力するときの手順を詳細に説明したものである。
【００２３】
図４において、Ｓ１１は、実行オプションの指定を行う。これは、後述する図５の実行オプションを実行開始時に入力して指定する。
Ｓ１２は、実行可能プログラムを先頭から実行して行く。
【００２４】
Ｓ１３は、メモリ割り付け／解放ライブラリの呼び出しが現れたか判別する。ＹＥＳの場合には、Ｓ１４に進む。ＮＯの場合には、Ｓ１９で更に終了処理ライブラリの呼び出しが現れたか判別し、ＹＥＳのときにＳ２０に進み、ＮＯのときにＳ１７に進む。
【００２５】
Ｓ１４は、Ｓ１３のＹＥＳでメモリ割り付け／解放ライブラリの呼び出したが現れたと判明したので、翻訳時にメモリ使用量通知オプションが指定されているか判別する。ＹＥＳの場合には、翻訳時にメモリ使用量通知オプションが指定されていると判明したので、Ｓ１５でメモリ使用量出力ルートに入り、Ｓ１６でメモリ使用量を外部に出力し、Ｓ１７に進む。Ｓ１４のＮＯの場合には、翻訳時にメモリ使用量通知オプションが指定されていなかったと判明したので、更に、Ｓ１８で実行時にメモリ使用量通知オプションが指定されているか判別し、ＹＥＳのときにＳ１５でメモリ使用量出力ルートに入り、Ｓ１６でメモリ使用量を外部に出力し、Ｓ１７に進み、一方、ＮＯのときにＳ１７に進む。
【００２６】
Ｓ２０は、Ｓ１９のＹＥＳで終了処理ライブラリの呼び出しと判明したので、翻訳時にメモリ使用量通知オプションが指定されているか判別する。ＹＥＳの場合には、翻訳時にメモリ使用量通知オプションが指定されていると判明したので、Ｓ２１でメモリ使用量のサマリ出力ルートに入り、Ｓ２２でメモリ使用量のサマリを外部に出力し、Ｓ１７に進む。Ｓ２０のＮＯの場合には、翻訳時にメモリ使用量通知オプションが指定されていなかったと判明したので、更に、Ｓ２３で実行時にメモリ使用量通知オプションが指定されているか判別し、ＹＥＳのときにＳ２１でメモリ使用量のサマリ出力ルートに入り、Ｓ２２でメモリ使用量のサマリを外部に出力し、Ｓ１７に進み、一方、ＮＯのときにＳ１７に進む。
【００２７】
以上によって、実行オプションの指定に従い、実行可能形式のプログラム中にメモリ割り付けやメモリ解放のライブラリ呼び出しが見つかったときに、翻訳時にメモリ使用量通知オプションが指定されていたときはメモリ使用量を出力し、翻訳時にメモリ使用量通知オプションが指定されていなくても実行時に実行オプションで指定されたときは同様にメモリ使用量を出力すると共に、終了処理ライブラリの呼び出し時に出力したメモリ使用量のサマリを計算して出力することにより、翻訳オプションおよび実行オプションの指定に従ってメモリ使用量およびそのサマリを簡易に出力させることが可能となる。
【００２８】
図５は、本発明の実行オプションの指定方法例を示す。これは、既述した図４のＳ１１の実行オプションの指定方法の例である。ここでは、
・ａ．ｏｕｔ  −Ａ×
というコマンド形式で実行オプションを実行時に利用者がキーボードなどからキー入力して指定する。この実行オプション中の先頭の“ａ．ｏｕｔ”はメモリ使用量およびそのサマリを出力する実行可能プログラムである。“−Ａ×”は本発明の実行時指定のメモリ使用量出力指示オプションであって、各種メモリ使用量出力指示の情報を設定するものである。
【００２９】
図６は、本発明のメモリ使用量およびメモリ使用量のサマリ出力形式例を示す。
図６の（ａ）は、メモリ使用量の出力例を示す。ここでは、左から右に、行番号、ａｃｔｉｏｎ、割当／解放メモリ量、ｔｏｔａｌ（メモリ使用量の全体）、メモリ使用量の意味を表す。
【００３０】
図６の（ｂ）は、メモリ使用量のサマリの出力例を示す。ここでは、Ｓｔａｔｉｃ（静的に割り付けたメモリ使用量）、ｄｙｎａｍｉｃ  ｍａｘ（動的に割り付けたメモリ使用量の最大値）、ｔｏｔａｌ（全体のメモリ使用量の最大値）について図示のようにそれぞれ計算して出力したものである。
【００３１】
図７は、本発明のメモリ割付けライブラリの動作フローチャートを示す。
図７において、Ｓ３１は、メモリ割付けルートに入る。これは、既述した図４のＳ１３のＹＥＳのときに入るメモリ割付けルートである。
【００３２】
Ｓ３２は、オプション指定ありか判別する。これは、既述した図４のＳ１４のＹＥＳ、あるいはＳ１８のＹＥＳで翻訳オプションあるいは実行オプションの指定ありか判別する。ＹＥＳの場合には、Ｓ３３でメモリ使用量出力ルートに入り、メモリ使用量を既述した図６の（ａ）のように外部出力し、終了する。一方、Ｓ３２のＮＯの場合には、終了する。
【００３３】
以上によって、メモリ割付けルートに入ったときにオプション（翻訳オプションあるいは実行オプション）で指定されていたときにメモリ使用量を外部出力することにより、既述した図６の（ａ）のメモリ使用量（静的、動的）が外部出力されることとなる。
【００３４】
【発明の効果】
以上説明したように、本発明によれば、翻訳オプションにより使用メモリ量出力指示を指定して翻訳しておき、当該翻訳オプションあるいは実行オプションに従い実行時にメモリ使用量を出力させる構成を採用しているため、プログラムのメモリ割り付けおよび解放のトレースを自動的かつ簡易に出力できる。
【図面の簡単な説明】
【図１】本発明の翻訳時の処理フローチャートである。
【図２】本発明の原始プログラムの例である。
【図３】本発明の翻訳オプションの指定方法例である。
【図４】本発明の実行時の処理フローチャートである。
【図５】本発明の実行オプションの指定方法例である。
【図６】本発明のメモリ使用量およびメモリ使用量のサマリ出力形式例である。
【図７】本発明のメモリ割付けライブラリの動作フローチャートである。
【符号の説明】
１：メモリ使用量出力指示手段
２：メモリ使用量出力手段
【図１】
0003817056.tif 000002
【図２】
0003817056.tif 000003
【図３】
0003817056.tif 000004
【図４】
0003817056.tif 000005
【図５】
0003817056.tif 000006
【図６】
0003817056.tif 000007
【図７】
0003817056.tif 000008