(57)【特許請求の範囲】
【請求項１】
データを格納するためのメモリ領域を動的に確保しそのメモリ領域を使用して所定の処理を行う処理実行プログラムを実行するコンピュータ内蔵の電子機器において、
メモリと、
前記メモリにおけるメモリ領域を確保するメモリマネージャと、
前記メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、
前記処理実行プログラムの全部または一部が実行され実現される、前記所定の処理を実行する処理手段と、
前記メモリマネージャによるメモリ領域の確保後の前記生存時間内にそのメモリ領域が解放されなかったことを検出する第１の解放漏れ検出手段と、
前記生存時間内に前記メモリ領域が解放されなかったことが前記第１の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段と、
を備え、
前記第１の解放漏れ検出手段は、前記生存時間内に前記メモリ領域が解放されなかったことを検出した場合に、前記生存時間内にそのメモリ領域が解放されていないことを示す通知を前記処理手段へ発行し、
前記処理手段は、前記第１の解放漏れ検出手段から前記通知を受け取ると、前記メモリマネージャに、前記メモリ領域を解放させるメモリ領域解放要求を発行し、このとき、前記処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、前記メモリ領域解放関数内に記述されている前記メモリ領域の解放要求の関数を実行し、
前記メモリマネージャは、前記生存時間内に前記メモリ領域が解放されなかったことが前記第１の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、前記メモリ領域解放要求に応じて、前記メモリ領域を解放し、
前記メモリ領域解放要求によって、前記強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第２の解放漏れ検出手段と、
前記強制解放猶予時間内に前記メモリ領域が解放されなかったことが前記第２の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放する強制解放手段と、
をさらに備えることを特徴とする電子機器。
【請求項２】
前記メモリマネージャは、前記処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保し、
前記生存時間設定手段は、前記メモリ領域確保要求に基づきそのメモリ領域の生存時間を前記処理手段に関連づけて設定する
ことを特徴とする請求項１記載の電子機器。
【請求項３】
前記強制解放手段により前記メモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段を備えることを特徴とする請求項１または２のいずれかに記載の電子機器。
【請求項４】
データを格納するためのメモリ領域を動的に確保しそのメモリ領域を使用して所定の処理を行う処理実行プログラムを実行するコンピュータを、
メモリにおける前記メモリ領域を確保するメモリマネージャと、
前記メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、
前記処理実行プログラムの全部または一部が実行され実現される、前記所定の処理を実行する処理手段と、
前記メモリマネージャによるメモリ領域の確保後の前記生存時間内にそのメモリ領域が解放されなかったことを検出する第１の解放漏れ検出手段と、
前記生存時間内に前記メモリ領域が解放されなかったことが前記第１の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段、
として機能させ、
前記第１の解放漏れ検出手段は、前記生存時間内に前記メモリ領域が解放されなかったことを検出した場合に、前記生存時間内にそのメモリ領域が解放されていないことを示す通知を前記処理手段へ発行し、
前記処理手段は、前記第１の解放漏れ検出手段から前記通知を受け取ると、前記メモリマネージャに、前記メモリ領域を解放させるメモリ領域解放要求を発行し、このとき、前記処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、前記メモリ領域解放関数内に記述されている前記メモリ領域の解放要求の関数を実行し、
前記メモリマネージャは、前記生存時間内に前記メモリ領域が解放されなかったことが前記第１の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、前記メモリ領域解放要求に応じて、前記メモリ領域を解放し、
前記コンピュータを、
前記メモリ領域解放要求によって、前記強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第２の解放漏れ検出手段と、
前記強制解放猶予時間内に前記メモリ領域が解放されなかったことが前記第２の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放する強制解放手段、
としてさらに機能させるためのメモリ管理プログラム。
【請求項５】
前記コンピュータを、
前記強制解放手段により前記メモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段として機能させ、
前記メモリマネージャは、前記処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保し、
前記生存時間設定手段は、前記メモリ領域確保要求に基づきそのメモリ領域の生存時間を前記処理手段に関連づけて設定する
ことを特徴とする請求項４記載のメモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子機器およびメモリ管理プログラムに関するものである。
【背景技術】
【０００２】
パーソナルコンピュータ、事務機器、家電製品といったコンピュータ内蔵の電子機器では、データ処理、機器制御などといった処理が記述されたプログラムが内蔵され、コンピュータにより実行される。これにより、記述された各種処理が実現される。
【０００３】
このようなプログラムでは、データを格納するメモリ領域として、プログラム設計時に予め確保される静的なメモリ領域と、プログラム実行時に適宜確保される動的なメモリ領域とが使用される。動的なメモリ領域は、プログラム実行時に必要に応じて確保されるものである。したがって、動的に確保したメモリ領域が不要になった場合（つまり、以後の処理で使用しない場合）には、そのメモリ領域は解放される。このようにすることで、メモリの記憶領域が効率よく利用される。
【０００４】
図６は、動的なメモリ領域の確保および解放を説明するフローチャートである。メモリ領域確保要求が発行されると（ステップＳ１０１）、メモリマネージャは、その要求に応じてメモリ領域を確保し、その領域の先頭位置などの情報を通知する（ステップＳ１０３）。そして、そのメモリ領域を使用する処理が完了すると（ステップＳ１０４）、メモリ領域解放要求が発行されると、メモリマネージャは、その要求に応じて、メモリ領域を解放する。
【０００５】
プログラミング言語として、Ｃ、Ｃ＋＋などを使用してプログラミングを行う場合、動的なメモリ領域の確保および解放は、プログラム内で関数を呼び出すことで明示的に実現される（例えば特許文献１参照）。
【０００６】
一方、Ｊａｖａ（商標）などの言語処理系では、言語処理系にガベージコレクション機能があるため、プログラマが意識して、メモリ領域を解放しなくてもよい（例えば特許文献２参照）。
【特許文献１】特開平６−９６１６５号公報
【特許文献２】特開２００３−１８６７３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述のように、Ｃ、Ｃ＋＋などといった、動的なメモリ領域の確保および解放を明示的に記述する必要があるプログラミング言語を使用してプログラム設計を行う場合、プログラマは、常に、確保した動的なメモリ領域をいずれかの時点で解放することを意識していなければならない。動的なメモリ領域の解放漏れが発生した場合、その動的なメモリ領域の存在する場所に新たなメモリ領域を割り当てることができなくなり、動的に割当可能なメモリの記憶領域が減ってしまう。一般的に、これをメモリリークという。このため、このように、メモリ領域の解放漏れを内包するプログラムを実行し続けると、メモリリークが進行し、最後には、動的なメモリ領域を新たなに確保できなくなって、プログラムの実行が停止してしまう。
【０００８】
図７は、メモリリークの発生を説明するフローチャートである。メモリ領域確保要求が発行されると（ステップＳ１０１）、メモリマネージャは、その要求に応じてメモリ領域を確保し、その領域の先頭位置などの情報を通知する（ステップＳ１０３）。そして、そのメモリ領域を使用する処理が完了しても（ステップＳ１０４）、メモリ領域解放要求が発行されないと（ステップＳ１１１）、以後、この領域は使用されないため、動的に割当可能な領域が減ってしまう。そして、このような、メモリ領域の解放漏れが繰り返し発生していくと、最後には、割当可能な領域が不足する。そして、メモリ領域確保要求が発行されても（ステップＳ１０１）、メモリマネージャは、その要求に応じたメモリ領域の確保に失敗し（ステップＳ１０２ａ）、エラー結果を通知する（ステップＳ１０３ａ）。これにより、処理が中止される（ステップＳ１０４ａ）。
【０００９】
このようなメモリリークの発生を予防するために、プログラマは、ソースコードを追跡していき、動的なメモリ領域の解放漏れを発見、解消していく。しかしながら、通常、プログラムは、条件分岐、繰り返し処理を多数有し複雑な内部構造となっており、さらに、どのような条件で動的にメモリ領域が確保され、どのような条件でそのメモリ領域が解放されるかを考えながらソースコードを追跡していくため、動的なメモリ領域の解放漏れを発見、解消する作業には時間がかかる。また、このように様々な事項を考慮に入れながらソースコードを確認していく必要があるため、メモリ領域の解放漏れが見落とされ、プログラム内に残ってしまう可能性がある。
【００１０】
比較的早く進行するメモリリークの場合には、製品出荷前の試験において、残存するメモリ領域の解放漏れを発見することができるが、比較的遅く進行するメモリリークの場合には、製品出荷前の試験において、残存するメモリ領域の解放漏れを発見することができない可能性がある。
【００１１】
また、上述のようなガベージコレクション機能を利用するには、メモリ管理が比較的高級な言語に限定され、上述のＣ言語のようにガベージコレクション機能を処理系に実装することが困難であることが多く、一部の言語処理系以外では、現実的ではない。
【００１２】
本発明は、上記の問題に鑑みてなされたものであり、プログラム内に存在するメモリ領域の解放漏れを検出することができる電子機器およびメモリ管理プログラムを得ることを目的とする。
【課題を解決するための手段】
【００１３】
上記の課題を解決するために、本発明では以下のようにした。
【００１４】
本発明に係る電子機器は、メモリと、メモリにおけるメモリ領域を確保するメモリマネージャと、メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、処理実行プログラムの全部または一部が実行され実現される、所定の処理を実行する処理手段と、メモリマネージャによるメモリ領域の確保後の生存時間内にそのメモリ領域が解放されなかったことを検出する第１の解放漏れ検出手段と、生存時間内に前記メモリ領域が解放されなかったことが第１の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段とを備える。
【００１５】
ここで、第１の解放漏れ検出手段は、生存時間内にメモリ領域が解放されなかったことを検出した場合に、生存時間内にそのメモリ領域が解放されていないことを示す通知を処理手段へ発行する。また、処理手段は、第１の解放漏れ検出手段から通知を受け取ると、メモリマネージャに、メモリ領域を解放させるメモリ領域解放要求を発行する。さらに、メモリマネージャは、生存時間内にメモリ領域が解放されなかったことが第１の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、メモリ領域解放要求に応じて、メモリ領域を解放する。
【００１６】
本発明に係る電子機器は、上記に加えて、メモリ領域解放要求によって、強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第２の解放漏れ検出手段と、強制解放猶予時間内にメモリ領域が解放されなかったことが第２の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放する強制解放手段とを備える。
【００１７】
また、本発明に係る電子機器は、上記の電子機器に加え、次のようにしてもよい。この場合、処理手段は、メモリ領域解放要求を発行するとき、処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、メモリ領域解放関数内に記述されているメモリ領域の解放要求の関数を実行する。
【００１８】
また、本発明に係る電子機器は、上記の電子機器に加え、次のようにしてもよい。この場合、メモリマネージャは、処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保し、生存時間設定手段は、メモリ領域確保要求に基づきそのメモリ領域の生存時間を処理手段に関連づけて設定する。
【００１９】
また、本発明に係る電子機器は、上記の電子機器に加え、次のようにしてもよい。この場合、電子機器は、強制解放手段によりメモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段を備える。
【００２０】
本発明に係るメモリ管理プログラムは、データを格納するためのメモリ領域を動的に確保しそのメモリ領域を使用して所定の処理を行う処理実行プログラムを実行するコンピュータを、メモリにおけるメモリ領域を確保するメモリマネージャと、メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、処理実行プログラムの全部または一部が実行され実現される、所定の処理を実行する処理手段と、メモリマネージャによるメモリ領域の確保後の生存時間内にそのメモリ領域が解放されなかったことを検出する第１の解放漏れ検出手段と、生存時間内にメモリ領域が解放されなかったことが第１の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段として機能させる。
【００２１】
ここで、第１の解放漏れ検出手段は、生存時間内にメモリ領域が解放されなかったことを検出した場合に、生存時間内にそのメモリ領域が解放されていないことを示す通知を処理手段へ発行する。また、処理手段は、第１の解放漏れ検出手段から通知を受け取ると、メモリマネージャに、メモリ領域を解放させるメモリ領域解放要求を発行する。さらに、メモリマネージャは、生存時間内にメモリ領域が解放されなかったことが第１の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、メモリ領域解放要求に応じて、メモリ領域を解放する。
【００２２】
本発明に係るメモリ管理プログラムは、上記に加えて、コンピュータを、メモリ領域解放要求によって、強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第２の解放漏れ検出手段と、強制解放猶予時間内にメモリ領域が解放されなかったことが第２の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放する強制解放手段として、さらに機能させる。
【００２３】
また、本発明に係るメモリ管理プログラムは、上記のメモリ管理プログラムに加え、次のようにしてもよい。この場合、処理手段は、メモリ領域解放要求を発行するとき、処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、メモリ領域解放関数内に記述されているメモリ領域の解放要求の関数を実行する。
【００２４】
また、本発明に係るメモリ管理プログラムは、上記のメモリ管理プログラムに加え、次のようにしてもよい。この場合、コンピュータを、強制解放手段によりメモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段として機能させる。
【００２５】
ここで、メモリマネージャは、処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保する。さらに、生存時間設定手段は、メモリ領域確保要求に基づきそのメモリ領域の生存時間を処理手段に関連づけて設定する。
【発明の効果】
【００２６】
本発明によれば、プログラム内に存在するメモリ領域の解放漏れを検出することができ、実機にメモリ領域解放漏れがあっても、メモリリークによって機器がエラ
ー停止しないようにすることができる。
また、本発明によれば、プログラムを実行させることで、プログラム内に存在するメモリ領域の解放漏れを検出し、解放漏れ情報に基づき、解放漏れの発生したメモリ領域を特定することができる。ひいては、メモリリークに関するデバッグ作業を軽減することができる。
【発明を実施するための最良の形態】
【００２７】
以下、図に基づいて本発明の実施の形態を説明する。
【００２８】
図１は、本発明の実施の形態に係る電子機器の構成を示すブロック図である。図１において、ＣＰＵ１は、コンピュータプログラムを実行し、コンピュータプログラムに記述された処理を実行する演算処理装置である。また、ＲＯＭ２は、コンピュータプログラムおよびデータを予め記憶した不揮発性のメモリである。また、ＲＡＭ３は、コンピュータプログラムを実行する際にそのコンピュータプログラムおよびデータを一時的に記憶するメモリである。
【００２９】
また、ＨＤＤ４は、オペレーティングシステム（ＯＳ）プログラム１１、この電子機器に内蔵される装置を制御する制御プログラム１２、ＲＡＭ３のメモリ管理を行うプログラムを内蔵するライブラリ１３、およびデバッガプログラム１４を格納する記録媒体としてのハードディスク駆動装置である。
【００３０】
また、インタフェース５は、この電子機器に内蔵される図示せぬ装置に接続されるインタフェース回路である。そのような装置は、ＣＰＵ１により実行されるプログラムによって、インタフェース５を介して制御される。
【００３１】
なお、ＣＰＵ１、ＲＯＭ２、ＲＡＭ３、ＨＤＤ４およびインタフェース５は、バス、コントローラなどにより相互に接続されており、コンピュータを構成する。
【００３２】
ＣＰＵ１は、ＲＡＭ３にＯＳプログラム１１、処理実行プログラムとしての制御プログラム１２、メモリ管理プログラムを含むライブラリ１３およびデバッガプログラム１４をロードし、実行することで、各種処理部を実現する。図２は、図１のＣＰＵ１により実現される処理部を示すブロック図である。図２に示すように、ＯＳプログラム１１が実行されることでＯＳ２１が実現され、制御プログラム１２が実行されることで機能制御部２２が実現され、ライブラリ１３が実行されることでメモリマネージャ２３が実現され、デバッガプログラム１４が実行されることでデバッガ２４が実現される。なお、図２では上述の処理部がすべて描画されているが、必要に応じて各プログラム１１〜１４は実行されるため、上述のすべての処理部が同時に実現されていなくてもよい。
【００３３】
図２において、ＯＳ２１は、オペレーティングシステムであって、タイマ機能、割り込み機能などを他のプログラムへ提供する処理部である。
【００３４】
また、１つの機能制御部２２は、この電子機器内の１または複数の装置の１つを制御する処理部である。電子機器内の装置としては、例えば、入力部および表示部を有する操作パネル、印刷装置などがあり、そのような装置はインタフェース５に電気的に接続されている。
【００３５】
また、メモリマネージャ２３は、ＲＡＭ３に、機能制御部２２が使用するデータを格納するためのメモリ領域を動的に確保し、また、そのメモリ領域を解放したりする処理部である。メモリマネージャ２３は、ＲＡＭ３におけるメモリ領域を確保する際にそのメモリ領域の生存時間を設定し、その生存時間内にそのメモリ領域が解放されなかったことを検出する。
【００３６】
また、デバッガ２４は、所定時間内にメモリ領域が解放されなかったことがメモリマネージャ２３により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する処理部である。
【００３７】
次に、上記機器の動作について説明する。
【００３８】
まず、制御プログラム１２内にメモリ領域の解放漏れがない場合について説明する。図３は、メモリ領域の解放漏れのない場合の、図１および図２に示す電子機器の動作を説明する図である。
【００３９】
制御プログラム１２が実行されると、機能制御部２２が実現される。ある処理で使用するデータを格納するメモリ領域が必要である場合には、制御プログラム１２内でメモリ領域確保要求が記述されている。制御プログラム１２の実行が進むと、メモリ領域確保要求が実行される。つまり、機能制御部２２が、メモリ領域確保要求を発行する（ステップＳ１）。このメモリ領域確保要求には、機能制御部２２に固有な識別情報であるアプリケーションＩＤ、およびメモリ領域生存時間が添付される。アプリケーションＩＤおよびメモリ領域生存時間は、例えば、メモリ領域確保要求の関数の引数としてプログラマにより指定される。上述のメモリ領域生存時間は、メモリ領域が使用可能な時間を示す。つまり、メモリ領域が確保されてからメモリ領域生存時間が経過するまで、そのメモリ領域が使用可能となる。このメモリ領域生存時間は、このメモリ領域を使用する処理の所要時間に対して十分長い時間とされる。
【００４０】
メモリマネージャ２３は、メモリ領域確保要求が発行されると、指定されたサイズのメモリ領域を確保する（ステップＳ２）。このとき、メモリ領域確保要求の関数読み出しにより、ライブラリ１３内の関数が実行される。これにより、メモリマネージャ２３は、メモリ領域確保要求、アプリケーションＩＤおよびメモリ領域生存時間を受け取り、メモリ領域を確保する。
【００４１】
メモリマネージャ２３は、メモリ領域確保に成功すると、メモリ領域の先頭位置などを示す領域位置情報を、例えばメモリ領域確保要求の関数の戻り値として、機能制御部２２に供給する（ステップＳ３）。領域位置情報としては、例えば、メモリ領域の先頭を示すポインタ値が使用される。また、メモリマネージャ２３は、メモリ領域確保に成功すると、ＯＳ２１の機能を利用して、メモリ領域生存時間をタイマにセットし、メモリ領域生存時間の計時を開始させる。
【００４２】
機能制御部２３は、確保されたメモリ領域の領域位置情報を取得すると、その情報により確保されたメモリ領域の位置を特定し、そのメモリ領域を使用して、所定の処理を実行する（ステップＳ４）。
【００４３】
そして、プログラマにより制御プログラム１２内でメモリ領域解放要求が正しく記述されていると、その処理の完了後に、メモリ領域解放要求が実行される。つまり、機能制御部２２が、メモリ領域解放要求を発行する（ステップＳ５）。メモリ領域解放要求には、領域位置情報として領域の先頭位置情報が添付される。先頭位置情報としては、領域の先頭を示すポインタが使用される。
【００４４】
メモリマネージャ２３は、メモリ領域解放要求が発行されると、指定されたメモリ領域を解放する（ステップＳ６）。このとき、メモリ領域解放要求の関数読み出しにより、ライブラリ１３内の関数が実行される。これにより、メモリマネージャ２３は、メモリ領域解放要求、および領域位置情報を受け取り、メモリ領域を解放する。メモリマネージャ２３は、メモリ領域を解放すると同時に、ＯＳ２１の機能を利用してタイマをクリア（無効化）する。
【００４５】
機能制御部２３による処理（ステップＳ４）の所要時間より長い時間にメモリ領域生存時間は設定されるため、メモリ領域生存時間の経過前にメモリ領域は解放される。
【００４６】
図３に示す場合では、メモリ領域生存時間が経過したときにはメモリ領域は既に解放されているため、メモリマネージャ２３は特に何もしない。
【００４７】
次に、制御プログラム１２内にメモリ領域の解放漏れがある場合について説明する。図４は、メモリ領域の解放漏れがある場合の、図１および図２に示す電子機器の動作を説明する図である。
【００４８】
図３に示す場合と同様に、メモリ領域の確保などが実行される（ステップＳ１〜４）。
【００４９】
メモリ領域の解放漏れがある場合、動的に確保したメモリ領域を使用する処理が完了しても（ステップＳ４）、メモリ領域解放要求が発行されない。したがって、メモリ領域解放要求が発行されないまま、メモリ領域生存時間が経過してしまう。このため、メモリ領域確保時にセットしたタイマによりメモリ領域生存時間が経過するとＯＳ２１による割り込みが発生する。これにより、メモリマネージャ２３は、確保したメモリ領域の解放漏れを検出する（ステップＳ１１）。
【００５０】
このように、メモリ領域の解放漏れを検出すると、メモリマネージャ２３は、メモリ領域解放漏れの発生をデバッガ２４に通知する（ステップＳ１２）。このとき、解放されなかったメモリ領域に関するアプリケーションＩＤ、メモリ領域生存時間、メモリ先頭位置情報およびメモリサイズが、併せて通知される。デバッガ２４が、別のプロセスで実行されている場合には、プロセス間通信で通知を行ってもよい。また、デバッガ２４が同一プロセス内で実行される場合には、デバッガプログラム１４内の関数が呼び出される。デバッガ２４は、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりする。なお、デバッガ２４を使用せずに、メモリマネージャ２３が、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりしてもよい。このアプリケーションＩＤにより、メモリ領域解放漏れのある機能制御部２２、つまり制御プログラム１２を特定可能となる。
【００５１】
また、メモリ領域の解放漏れを検出すると、メモリマネージャ２３は、そのメモリ領域の確保要求の際に供給されたアプリケーションＩＤにより、解放漏れを有する機能制御部２２を特定し、その機能制御部２２へメモリ領域解放警告を供給する（ステップＳ１４）。このとき、制御プログラム１２内に予め含まれている、解放漏れ時に使用される所定の名称のメモリ領域解放関数が呼び出される。この関数は、プログラマによって制御プログラム１２内に予め記述される。また、メモリマネージャ２３は、メモリ領域警告を供給するときに、ＯＳ２１の機能を利用して、強制解放猶予時間をタイマにセットし、強制解放猶予時間の計時を開始させる。この強制解放猶予時間は、このメモリ領域を解放するための所要時間に対して十分長い時間とされる。
【００５２】
メモリ領域解放警告を受けると、機能制御部２２は、メモリ領域解放要求を発行する（ステップＳ１５）。このとき、制御プログラム１２内に予め含まれている、解放漏れ時に使用される所定の名称のメモリ領域解放関数が実行され、その関数内に記述されているメモリ領域の解放要求の関数が実行される。メモリマネージャ２３は、メモリ領域を解放すると同時に、ＯＳ２１の機能を利用してタイマをクリア（無効化）する。
【００５３】
メモリ領域解放の所要時間より長い時間に強制解放猶予時間は設定されるため、強制解放猶予時間の経過前にメモリ領域は解放される。つまり、メモリ領域は、本来解放されるべきタイミングから遅延するが、解放される。
【００５４】
図４に示す場合では、強制解放猶予時間が経過したときには、メモリ領域は既に解放されているため、メモリマネージャ２３は特に何もしない。
【００５５】
このように、メモリ領域の解放漏れが発生している場合には、機能制御部２２およびデバッガ２４に通知される。そして、その通知を受けて機能制御部２２によりメモリ領域が解放される。また、デバッガ２４によりメモリ領域の解放漏れの情報がデバッグのために出力される。
【００５６】
次に、解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合について説明する。これの原因としては、プログラムのバグ（不具合）などが考えられる。図５は、メモリ領域の解放漏れがあり、かつ解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合の、図１および図２に示す電子機器の動作を説明する図である。
【００５７】
この場合、メモリ領域解放警告が供給されても、機能制御部２２は、メモリ領域解放要求を発行しない。このとき、解放漏れ時に使用される所定の名称のメモリ領域解放関数が呼び出されても、正常に機能しないため、何も実行されない。したがって、メモリ領域解放要求が発行されないまま、強制解放猶予時間が経過してしまい、ＯＳ２１による割り込みが発生する。メモリマネージャ２３は、ＯＳ２１の割り込みにより、警告の対象となったメモリ領域が解放されていないことを検出する。
【００５８】
メモリマネージャ２３は、警告の対象となったメモリ領域が解放されていないことを検出すると、メモリ領域解放要求がなくても、そのメモリ領域を解放する（ステップＳ２１）。
【００５９】
このように、メモリ領域を強制解放すると、メモリマネージャ２３は、メモリ領域の強制解放の発生をデバッガ２４に通知する（ステップＳ２２）。このとき、強制解放したメモリ領域に関するアプリケーションＩＤ、メモリ領域生存時間、メモリ先頭位置情報およびメモリサイズが、併せて通知される。デバッガ２４が、別のプロセスで実行されている場合には、プロセス間通信で通知を行ってもよい。また、デバッガ２４が同一プロセス内で実行される場合には、デバッガプログラム１４内の関数が呼び出される。デバッガ２４は、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりする。なお、デバッガ２４を使用せずに、メモリマネージャ２３が、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりしてもよい。このアプリケーションＩＤにより、メモリ領域の強制解放が発生した機能制御部２２、つまり制御プログラム１２を特定可能となる。
【００６０】
また、メモリ領域を強制解放すると、メモリマネージャ２３は、そのメモリ領域の確保要求の際に供給されたアプリケーションＩＤにより、強制解放されたメモリ領域を確保した機能制御部２２を特定し、その機能制御部２２へ強制解放通知を供給する（ステップＳ２４）。
【００６１】
このように、解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合でも、最終的には、メモリマネージャ２３が強制的にメモリ領域を解放する。
【００６２】
以上のように、上記実施の形態によれば、生存時間設定手段としてのメモリマネージャ２３は、ＲＡＭ３におけるメモリ領域を確保する際にそのメモリ領域の生存時間を設定する。そして、解放漏れ検出手段としてのメモリマネージャ２３は、生存時間内にそのメモリ領域が解放されなかったことを検出する。これにより、プログラムを実行させることで、プログラム内に存在するメモリ領域の解放漏れを自動的かつ定量的に検出することができる。ひいては、ソフトウェアの品質向上に繋がる。
【００６３】
また、上記実施の形態によれば、解放漏れ情報出力手段としてのデバッガ２４は、生存時間内にそのメモリ領域が解放されなかったことがメモリマネージャ２３により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する。これにより、プログラムを実行させることで、プログラム内に存在するメモリ領域の解放漏れを検出し、解放漏れ情報に基づき、解放漏れの発生したメモリ領域を特定することができる。ひいては、メモリリークに関するデバッグ作業を軽減することができる。
【００６４】
また、上記実施の形態によれば、強制解放手段としてのメモリマネージャ２３は、生存時間内にそのメモリ領域が解放されなかったことを検出した場合に、そのメモリ領域を強制的に解放する。これにより、仮に実機にメモリ領域の解放漏れが残っていても、メモリリークによって機器がエラー停止しないようにすることができる。
【００６５】
また、上記実施の形態によれば、強制解放情報出力手段としてのデバッガ２４は、メモリマネージャ２３によりメモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する。これにより、強制解放情報に基づき、解放漏れの発生したメモリ領域を特定することができる。ひいては、メモリリークに関するデバッグ作業を軽減することができる。
【００６６】
なお、上述の実施の形態は、本発明の好適な例であるが、本発明は、これらに限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々の変形、変更が可能である。
【００６７】
例えば、解放予定のないメモリ領域を確保する場合には、メモリ生存時間をゼロとし、メモリマネージャ２３は、メモリ生存時間がゼロの場合には、上述のタイマをセットせず、メモリ生存時間経過後のＯＳ２１による割り込みを発生させないようにしてもよい。
【００６８】
また、上記実施の形態の構成は、開発段階の電子機器でも、実機でも使用可能である。
【００６９】
また、上記実施の形態において、デバッガとして、ＧＮＵプロジェクトデバッガ（ＧＤＢ）を使用してもよい。また、デバッガ２４を、ＣＰＵ１によりデバッガプログラム１４が実行されることで実現されるものとしているが、その代わりに、この電子機器と通信可能な外部装置やその外部装置で実行されるターミナルソフトウェアなどとしてもよい。
【産業上の利用可能性】
【００７０】
本発明は、例えば、印刷装置などといった画像形成装置に適用可能である。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施の形態に係る電子機器の構成を示すブロック図である。
【図２】図１のＣＰＵにより実現される処理部を示すブロック図である。
【図３】メモリ領域の解放漏れのない場合の、図１および図２に示す電子機器の動作を説明する図である。
【図４】メモリ領域の解放漏れがある場合の、図１および図２に示す電子機器の動作を説明する図である。
【図５】メモリ解放の漏れがあり、かつ解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合の、図１および図２に示す電子機器の動作を説明する図である。
【図６】動的なメモリ領域の確保および解放を説明するフローチャートである。
【図７】メモリリークの発生を説明するフローチャートである。
【符号の説明】
【００７２】
３  ＲＡＭ（メモリ）
１２  制御プログラム（プログラム，処理実行プログラム）
１３  ライブラリ（メモリ管理プログラム）
２２  機能制御部（処理手段）
２３  メモリマネージャ（生存時間設定手段，解放漏れ検出手段，強制解放手段，メモリマネージャ，第２の解放漏れ検出手段）
２４  デバッガ（解放漏れ情報出力手段，強制解放情報出力手段）
【図１】
0005133649.tif 000002
【図２】
0005133649.tif 000003
【図３】
0005133649.tif 000004
【図４】
0005133649.tif 000005
【図５】
0005133649.tif 000006
【図６】
0005133649.tif 000007
【図７】
0005133649.tif 000008