JP5133649B2 - 電子機器およびメモリ管理プログラム - Google Patents

電子機器およびメモリ管理プログラム Download PDF

Info

Publication number
JP5133649B2
JP5133649B2 JP2007269548A JP2007269548A JP5133649B2 JP 5133649 B2 JP5133649 B2 JP 5133649B2 JP 2007269548 A JP2007269548 A JP 2007269548A JP 2007269548 A JP2007269548 A JP 2007269548A JP 5133649 B2 JP5133649 B2 JP 5133649B2
Authority
JP
Japan
Prior art keywords
memory area
release
memory
lifetime
released
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007269548A
Other languages
English (en)
Other versions
JP2009098910A (ja
Inventor
敏昭 上野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kyocera Document Solutions Inc
Original Assignee
Kyocera Document Solutions Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kyocera Document Solutions Inc filed Critical Kyocera Document Solutions Inc
Priority to JP2007269548A priority Critical patent/JP5133649B2/ja
Priority to US12/204,276 priority patent/US8280927B2/en
Publication of JP2009098910A publication Critical patent/JP2009098910A/ja
Application granted granted Critical
Publication of JP5133649B2 publication Critical patent/JP5133649B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System (AREA)

Description

本発明は、電子機器およびメモリ管理プログラムに関するものである。
パーソナルコンピュータ、事務機器、家電製品といったコンピュータ内蔵の電子機器では、データ処理、機器制御などといった処理が記述されたプログラムが内蔵され、コンピュータにより実行される。これにより、記述された各種処理が実現される。
このようなプログラムでは、データを格納するメモリ領域として、プログラム設計時に予め確保される静的なメモリ領域と、プログラム実行時に適宜確保される動的なメモリ領域とが使用される。動的なメモリ領域は、プログラム実行時に必要に応じて確保されるものである。したがって、動的に確保したメモリ領域が不要になった場合(つまり、以後の処理で使用しない場合)には、そのメモリ領域は解放される。このようにすることで、メモリの記憶領域が効率よく利用される。
図6は、動的なメモリ領域の確保および解放を説明するフローチャートである。メモリ領域確保要求が発行されると(ステップS101)、メモリマネージャは、その要求に応じてメモリ領域を確保し、その領域の先頭位置などの情報を通知する(ステップS103)。そして、そのメモリ領域を使用する処理が完了すると(ステップS104)、メモリ領域解放要求が発行されると、メモリマネージャは、その要求に応じて、メモリ領域を解放する。
プログラミング言語として、C、C++などを使用してプログラミングを行う場合、動的なメモリ領域の確保および解放は、プログラム内で関数を呼び出すことで明示的に実現される(例えば特許文献1参照)。
一方、Java(商標)などの言語処理系では、言語処理系にガベージコレクション機能があるため、プログラマが意識して、メモリ領域を解放しなくてもよい(例えば特許文献2参照)。
特開平6−96165号公報 特開2003−186737号公報
上述のように、C、C++などといった、動的なメモリ領域の確保および解放を明示的に記述する必要があるプログラミング言語を使用してプログラム設計を行う場合、プログラマは、常に、確保した動的なメモリ領域をいずれかの時点で解放することを意識していなければならない。動的なメモリ領域の解放漏れが発生した場合、その動的なメモリ領域の存在する場所に新たなメモリ領域を割り当てることができなくなり、動的に割当可能なメモリの記憶領域が減ってしまう。一般的に、これをメモリリークという。このため、このように、メモリ領域の解放漏れを内包するプログラムを実行し続けると、メモリリークが進行し、最後には、動的なメモリ領域を新たなに確保できなくなって、プログラムの実行が停止してしまう。
図7は、メモリリークの発生を説明するフローチャートである。メモリ領域確保要求が発行されると(ステップS101)、メモリマネージャは、その要求に応じてメモリ領域を確保し、その領域の先頭位置などの情報を通知する(ステップS103)。そして、そのメモリ領域を使用する処理が完了しても(ステップS104)、メモリ領域解放要求が発行されないと(ステップS111)、以後、この領域は使用されないため、動的に割当可能な領域が減ってしまう。そして、このような、メモリ領域の解放漏れが繰り返し発生していくと、最後には、割当可能な領域が不足する。そして、メモリ領域確保要求が発行されても(ステップS101)、メモリマネージャは、その要求に応じたメモリ領域の確保に失敗し(ステップS102a)、エラー結果を通知する(ステップS103a)。これにより、処理が中止される(ステップS104a)。
このようなメモリリークの発生を予防するために、プログラマは、ソースコードを追跡していき、動的なメモリ領域の解放漏れを発見、解消していく。しかしながら、通常、プログラムは、条件分岐、繰り返し処理を多数有し複雑な内部構造となっており、さらに、どのような条件で動的にメモリ領域が確保され、どのような条件でそのメモリ領域が解放されるかを考えながらソースコードを追跡していくため、動的なメモリ領域の解放漏れを発見、解消する作業には時間がかかる。また、このように様々な事項を考慮に入れながらソースコードを確認していく必要があるため、メモリ領域の解放漏れが見落とされ、プログラム内に残ってしまう可能性がある。
比較的早く進行するメモリリークの場合には、製品出荷前の試験において、残存するメモリ領域の解放漏れを発見することができるが、比較的遅く進行するメモリリークの場合には、製品出荷前の試験において、残存するメモリ領域の解放漏れを発見することができない可能性がある。
また、上述のようなガベージコレクション機能を利用するには、メモリ管理が比較的高級な言語に限定され、上述のC言語のようにガベージコレクション機能を処理系に実装することが困難であることが多く、一部の言語処理系以外では、現実的ではない。
本発明は、上記の問題に鑑みてなされたものであり、プログラム内に存在するメモリ領域の解放漏れを検出することができる電子機器およびメモリ管理プログラムを得ることを目的とする。
上記の課題を解決するために、本発明では以下のようにした。
本発明に係る電子機器は、メモリと、メモリにおけるメモリ領域を確保するメモリマネージャと、メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、処理実行プログラムの全部または一部が実行され実現される、所定の処理を実行する処理手段と、メモリマネージャによるメモリ領域の確保後の生存時間内にそのメモリ領域が解放されなかったことを検出する第1の解放漏れ検出手段と、生存時間内に前記メモリ領域が解放されなかったことが第1の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段とを備える。
ここで、第1の解放漏れ検出手段は、生存時間内にメモリ領域が解放されなかったことを検出した場合に、生存時間内にそのメモリ領域が解放されていないことを示す通知を処理手段へ発行する。また、処理手段は、第1の解放漏れ検出手段から通知を受け取ると、メモリマネージャに、メモリ領域を解放させるメモリ領域解放要求を発行する。さらに、メモリマネージャは、生存時間内にメモリ領域が解放されなかったことが第1の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、メモリ領域解放要求に応じて、メモリ領域を解放する。
本発明に係る電子機器は、上記に加えて、メモリ領域解放要求によって、強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第2の解放漏れ検出手段と、強制解放猶予時間内にメモリ領域が解放されなかったことが第2の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放する強制解放手段とを備える。
また、本発明に係る電子機器は、上記の電子機器に加え、次のようにしてもよい。この場合、処理手段は、メモリ領域解放要求を発行するとき、処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、メモリ領域解放関数内に記述されているメモリ領域の解放要求の関数を実行する。
また、本発明に係る電子機器は、上記の電子機器に加え、次のようにしてもよい。この場合、メモリマネージャは、処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保し、生存時間設定手段は、メモリ領域確保要求に基づきそのメモリ領域の生存時間を処理手段に関連づけて設定する。
また、本発明に係る電子機器は、上記の電子機器に加え、次のようにしてもよい。この場合、電子機器は、強制解放手段によりメモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段を備える。
本発明に係るメモリ管理プログラムは、データを格納するためのメモリ領域を動的に確保しそのメモリ領域を使用して所定の処理を行う処理実行プログラムを実行するコンピュータを、メモリにおけるメモリ領域を確保するメモリマネージャと、メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、処理実行プログラムの全部または一部が実行され実現される、所定の処理を実行する処理手段と、メモリマネージャによるメモリ領域の確保後の生存時間内にそのメモリ領域が解放されなかったことを検出する第1の解放漏れ検出手段と、生存時間内にメモリ領域が解放されなかったことが第1の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段として機能させる。
ここで、第1の解放漏れ検出手段は、生存時間内にメモリ領域が解放されなかったことを検出した場合に、生存時間内にそのメモリ領域が解放されていないことを示す通知を処理手段へ発行する。また、処理手段は、第1の解放漏れ検出手段から通知を受け取ると、メモリマネージャに、メモリ領域を解放させるメモリ領域解放要求を発行する。さらに、メモリマネージャは、生存時間内にメモリ領域が解放されなかったことが第1の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、メモリ領域解放要求に応じて、メモリ領域を解放する。
本発明に係るメモリ管理プログラムは、上記に加えて、コンピュータを、メモリ領域解放要求によって、強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第2の解放漏れ検出手段と、強制解放猶予時間内にメモリ領域が解放されなかったことが第2の解放漏れ検出手段により検出された場合に、メモリ領域を強制的に解放する強制解放手段として、さらに機能させる。
また、本発明に係るメモリ管理プログラムは、上記のメモリ管理プログラムに加え、次のようにしてもよい。この場合、処理手段は、メモリ領域解放要求を発行するとき、処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、メモリ領域解放関数内に記述されているメモリ領域の解放要求の関数を実行する。
また、本発明に係るメモリ管理プログラムは、上記のメモリ管理プログラムに加え、次のようにしてもよい。この場合、コンピュータを、強制解放手段によりメモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段として機能させる。
ここで、メモリマネージャは、処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保する。さらに、生存時間設定手段は、メモリ領域確保要求に基づきそのメモリ領域の生存時間を処理手段に関連づけて設定する。
本発明によれば、プログラム内に存在するメモリ領域の解放漏れを検出することができ、実機にメモリ領域解放漏れがあっても、メモリリークによって機器がエラ
ー停止しないようにすることができる。
また、本発明によれば、プログラムを実行させることで、プログラム内に存在するメモリ領域の解放漏れを検出し、解放漏れ情報に基づき、解放漏れの発生したメモリ領域を特定することができる。ひいては、メモリリークに関するデバッグ作業を軽減することができる。
以下、図に基づいて本発明の実施の形態を説明する。
図1は、本発明の実施の形態に係る電子機器の構成を示すブロック図である。図1において、CPU1は、コンピュータプログラムを実行し、コンピュータプログラムに記述された処理を実行する演算処理装置である。また、ROM2は、コンピュータプログラムおよびデータを予め記憶した不揮発性のメモリである。また、RAM3は、コンピュータプログラムを実行する際にそのコンピュータプログラムおよびデータを一時的に記憶するメモリである。
また、HDD4は、オペレーティングシステム(OS)プログラム11、この電子機器に内蔵される装置を制御する制御プログラム12、RAM3のメモリ管理を行うプログラムを内蔵するライブラリ13、およびデバッガプログラム14を格納する記録媒体としてのハードディスク駆動装置である。
また、インタフェース5は、この電子機器に内蔵される図示せぬ装置に接続されるインタフェース回路である。そのような装置は、CPU1により実行されるプログラムによって、インタフェース5を介して制御される。
なお、CPU1、ROM2、RAM3、HDD4およびインタフェース5は、バス、コントローラなどにより相互に接続されており、コンピュータを構成する。
CPU1は、RAM3にOSプログラム11、処理実行プログラムとしての制御プログラム12、メモリ管理プログラムを含むライブラリ13およびデバッガプログラム14をロードし、実行することで、各種処理部を実現する。図2は、図1のCPU1により実現される処理部を示すブロック図である。図2に示すように、OSプログラム11が実行されることでOS21が実現され、制御プログラム12が実行されることで機能制御部22が実現され、ライブラリ13が実行されることでメモリマネージャ23が実現され、デバッガプログラム14が実行されることでデバッガ24が実現される。なお、図2では上述の処理部がすべて描画されているが、必要に応じて各プログラム11〜14は実行されるため、上述のすべての処理部が同時に実現されていなくてもよい。
図2において、OS21は、オペレーティングシステムであって、タイマ機能、割り込み機能などを他のプログラムへ提供する処理部である。
また、1つの機能制御部22は、この電子機器内の1または複数の装置の1つを制御する処理部である。電子機器内の装置としては、例えば、入力部および表示部を有する操作パネル、印刷装置などがあり、そのような装置はインタフェース5に電気的に接続されている。
また、メモリマネージャ23は、RAM3に、機能制御部22が使用するデータを格納するためのメモリ領域を動的に確保し、また、そのメモリ領域を解放したりする処理部である。メモリマネージャ23は、RAM3におけるメモリ領域を確保する際にそのメモリ領域の生存時間を設定し、その生存時間内にそのメモリ領域が解放されなかったことを検出する。
また、デバッガ24は、所定時間内にメモリ領域が解放されなかったことがメモリマネージャ23により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する処理部である。
次に、上記機器の動作について説明する。
まず、制御プログラム12内にメモリ領域の解放漏れがない場合について説明する。図3は、メモリ領域の解放漏れのない場合の、図1および図2に示す電子機器の動作を説明する図である。
制御プログラム12が実行されると、機能制御部22が実現される。ある処理で使用するデータを格納するメモリ領域が必要である場合には、制御プログラム12内でメモリ領域確保要求が記述されている。制御プログラム12の実行が進むと、メモリ領域確保要求が実行される。つまり、機能制御部22が、メモリ領域確保要求を発行する(ステップS1)。このメモリ領域確保要求には、機能制御部22に固有な識別情報であるアプリケーションID、およびメモリ領域生存時間が添付される。アプリケーションIDおよびメモリ領域生存時間は、例えば、メモリ領域確保要求の関数の引数としてプログラマにより指定される。上述のメモリ領域生存時間は、メモリ領域が使用可能な時間を示す。つまり、メモリ領域が確保されてからメモリ領域生存時間が経過するまで、そのメモリ領域が使用可能となる。このメモリ領域生存時間は、このメモリ領域を使用する処理の所要時間に対して十分長い時間とされる。
メモリマネージャ23は、メモリ領域確保要求が発行されると、指定されたサイズのメモリ領域を確保する(ステップS2)。このとき、メモリ領域確保要求の関数読み出しにより、ライブラリ13内の関数が実行される。これにより、メモリマネージャ23は、メモリ領域確保要求、アプリケーションIDおよびメモリ領域生存時間を受け取り、メモリ領域を確保する。
メモリマネージャ23は、メモリ領域確保に成功すると、メモリ領域の先頭位置などを示す領域位置情報を、例えばメモリ領域確保要求の関数の戻り値として、機能制御部22に供給する(ステップS3)。領域位置情報としては、例えば、メモリ領域の先頭を示すポインタ値が使用される。また、メモリマネージャ23は、メモリ領域確保に成功すると、OS21の機能を利用して、メモリ領域生存時間をタイマにセットし、メモリ領域生存時間の計時を開始させる。
機能制御部23は、確保されたメモリ領域の領域位置情報を取得すると、その情報により確保されたメモリ領域の位置を特定し、そのメモリ領域を使用して、所定の処理を実行する(ステップS4)。
そして、プログラマにより制御プログラム12内でメモリ領域解放要求が正しく記述されていると、その処理の完了後に、メモリ領域解放要求が実行される。つまり、機能制御部22が、メモリ領域解放要求を発行する(ステップS5)。メモリ領域解放要求には、領域位置情報として領域の先頭位置情報が添付される。先頭位置情報としては、領域の先頭を示すポインタが使用される。
メモリマネージャ23は、メモリ領域解放要求が発行されると、指定されたメモリ領域を解放する(ステップS6)。このとき、メモリ領域解放要求の関数読み出しにより、ライブラリ13内の関数が実行される。これにより、メモリマネージャ23は、メモリ領域解放要求、および領域位置情報を受け取り、メモリ領域を解放する。メモリマネージャ23は、メモリ領域を解放すると同時に、OS21の機能を利用してタイマをクリア(無効化)する。
機能制御部23による処理(ステップS4)の所要時間より長い時間にメモリ領域生存時間は設定されるため、メモリ領域生存時間の経過前にメモリ領域は解放される。
図3に示す場合では、メモリ領域生存時間が経過したときにはメモリ領域は既に解放されているため、メモリマネージャ23は特に何もしない。
次に、制御プログラム12内にメモリ領域の解放漏れがある場合について説明する。図4は、メモリ領域の解放漏れがある場合の、図1および図2に示す電子機器の動作を説明する図である。
図3に示す場合と同様に、メモリ領域の確保などが実行される(ステップS1〜4)。
メモリ領域の解放漏れがある場合、動的に確保したメモリ領域を使用する処理が完了しても(ステップS4)、メモリ領域解放要求が発行されない。したがって、メモリ領域解放要求が発行されないまま、メモリ領域生存時間が経過してしまう。このため、メモリ領域確保時にセットしたタイマによりメモリ領域生存時間が経過するとOS21による割り込みが発生する。これにより、メモリマネージャ23は、確保したメモリ領域の解放漏れを検出する(ステップS11)。
このように、メモリ領域の解放漏れを検出すると、メモリマネージャ23は、メモリ領域解放漏れの発生をデバッガ24に通知する(ステップS12)。このとき、解放されなかったメモリ領域に関するアプリケーションID、メモリ領域生存時間、メモリ先頭位置情報およびメモリサイズが、併せて通知される。デバッガ24が、別のプロセスで実行されている場合には、プロセス間通信で通知を行ってもよい。また、デバッガ24が同一プロセス内で実行される場合には、デバッガプログラム14内の関数が呼び出される。デバッガ24は、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりする。なお、デバッガ24を使用せずに、メモリマネージャ23が、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりしてもよい。このアプリケーションIDにより、メモリ領域解放漏れのある機能制御部22、つまり制御プログラム12を特定可能となる。
また、メモリ領域の解放漏れを検出すると、メモリマネージャ23は、そのメモリ領域の確保要求の際に供給されたアプリケーションIDにより、解放漏れを有する機能制御部22を特定し、その機能制御部22へメモリ領域解放警告を供給する(ステップS14)。このとき、制御プログラム12内に予め含まれている、解放漏れ時に使用される所定の名称のメモリ領域解放関数が呼び出される。この関数は、プログラマによって制御プログラム12内に予め記述される。また、メモリマネージャ23は、メモリ領域警告を供給するときに、OS21の機能を利用して、強制解放猶予時間をタイマにセットし、強制解放猶予時間の計時を開始させる。この強制解放猶予時間は、このメモリ領域を解放するための所要時間に対して十分長い時間とされる。
メモリ領域解放警告を受けると、機能制御部22は、メモリ領域解放要求を発行する(ステップS15)。このとき、制御プログラム12内に予め含まれている、解放漏れ時に使用される所定の名称のメモリ領域解放関数が実行され、その関数内に記述されているメモリ領域の解放要求の関数が実行される。メモリマネージャ23は、メモリ領域を解放すると同時に、OS21の機能を利用してタイマをクリア(無効化)する。
メモリ領域解放の所要時間より長い時間に強制解放猶予時間は設定されるため、強制解放猶予時間の経過前にメモリ領域は解放される。つまり、メモリ領域は、本来解放されるべきタイミングから遅延するが、解放される。
図4に示す場合では、強制解放猶予時間が経過したときには、メモリ領域は既に解放されているため、メモリマネージャ23は特に何もしない。
このように、メモリ領域の解放漏れが発生している場合には、機能制御部22およびデバッガ24に通知される。そして、その通知を受けて機能制御部22によりメモリ領域が解放される。また、デバッガ24によりメモリ領域の解放漏れの情報がデバッグのために出力される。
次に、解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合について説明する。これの原因としては、プログラムのバグ(不具合)などが考えられる。図5は、メモリ領域の解放漏れがあり、かつ解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合の、図1および図2に示す電子機器の動作を説明する図である。
この場合、メモリ領域解放警告が供給されても、機能制御部22は、メモリ領域解放要求を発行しない。このとき、解放漏れ時に使用される所定の名称のメモリ領域解放関数が呼び出されても、正常に機能しないため、何も実行されない。したがって、メモリ領域解放要求が発行されないまま、強制解放猶予時間が経過してしまい、OS21による割り込みが発生する。メモリマネージャ23は、OS21の割り込みにより、警告の対象となったメモリ領域が解放されていないことを検出する。
メモリマネージャ23は、警告の対象となったメモリ領域が解放されていないことを検出すると、メモリ領域解放要求がなくても、そのメモリ領域を解放する(ステップS21)。
このように、メモリ領域を強制解放すると、メモリマネージャ23は、メモリ領域の強制解放の発生をデバッガ24に通知する(ステップS22)。このとき、強制解放したメモリ領域に関するアプリケーションID、メモリ領域生存時間、メモリ先頭位置情報およびメモリサイズが、併せて通知される。デバッガ24が、別のプロセスで実行されている場合には、プロセス間通信で通知を行ってもよい。また、デバッガ24が同一プロセス内で実行される場合には、デバッガプログラム14内の関数が呼び出される。デバッガ24は、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりする。なお、デバッガ24を使用せずに、メモリマネージャ23が、通知された情報を、図示せぬ表示装置に出力して表示させたり、この電子機器に接続される図示せぬ外部装置へ出力したり、図示せぬ不揮発性の記録媒体に出力して記録させたりしてもよい。このアプリケーションIDにより、メモリ領域の強制解放が発生した機能制御部22、つまり制御プログラム12を特定可能となる。
また、メモリ領域を強制解放すると、メモリマネージャ23は、そのメモリ領域の確保要求の際に供給されたアプリケーションIDにより、強制解放されたメモリ領域を確保した機能制御部22を特定し、その機能制御部22へ強制解放通知を供給する(ステップS24)。
このように、解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合でも、最終的には、メモリマネージャ23が強制的にメモリ領域を解放する。
以上のように、上記実施の形態によれば、生存時間設定手段としてのメモリマネージャ23は、RAM3におけるメモリ領域を確保する際にそのメモリ領域の生存時間を設定する。そして、解放漏れ検出手段としてのメモリマネージャ23は、生存時間内にそのメモリ領域が解放されなかったことを検出する。これにより、プログラムを実行させることで、プログラム内に存在するメモリ領域の解放漏れを自動的かつ定量的に検出することができる。ひいては、ソフトウェアの品質向上に繋がる。
また、上記実施の形態によれば、解放漏れ情報出力手段としてのデバッガ24は、生存時間内にそのメモリ領域が解放されなかったことがメモリマネージャ23により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する。これにより、プログラムを実行させることで、プログラム内に存在するメモリ領域の解放漏れを検出し、解放漏れ情報に基づき、解放漏れの発生したメモリ領域を特定することができる。ひいては、メモリリークに関するデバッグ作業を軽減することができる。
また、上記実施の形態によれば、強制解放手段としてのメモリマネージャ23は、生存時間内にそのメモリ領域が解放されなかったことを検出した場合に、そのメモリ領域を強制的に解放する。これにより、仮に実機にメモリ領域の解放漏れが残っていても、メモリリークによって機器がエラー停止しないようにすることができる。
また、上記実施の形態によれば、強制解放情報出力手段としてのデバッガ24は、メモリマネージャ23によりメモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する。これにより、強制解放情報に基づき、解放漏れの発生したメモリ領域を特定することができる。ひいては、メモリリークに関するデバッグ作業を軽減することができる。
なお、上述の実施の形態は、本発明の好適な例であるが、本発明は、これらに限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々の変形、変更が可能である。
例えば、解放予定のないメモリ領域を確保する場合には、メモリ生存時間をゼロとし、メモリマネージャ23は、メモリ生存時間がゼロの場合には、上述のタイマをセットせず、メモリ生存時間経過後のOS21による割り込みを発生させないようにしてもよい。
また、上記実施の形態の構成は、開発段階の電子機器でも、実機でも使用可能である。
また、上記実施の形態において、デバッガとして、GNUプロジェクトデバッガ(GDB)を使用してもよい。また、デバッガ24を、CPU1によりデバッガプログラム14が実行されることで実現されるものとしているが、その代わりに、この電子機器と通信可能な外部装置やその外部装置で実行されるターミナルソフトウェアなどとしてもよい。
本発明は、例えば、印刷装置などといった画像形成装置に適用可能である。
本発明の実施の形態に係る電子機器の構成を示すブロック図である。 図1のCPUにより実現される処理部を示すブロック図である。 メモリ領域の解放漏れのない場合の、図1および図2に示す電子機器の動作を説明する図である。 メモリ領域の解放漏れがある場合の、図1および図2に示す電子機器の動作を説明する図である。 メモリ解放の漏れがあり、かつ解放漏れ時に使用される所定の名称のメモリ領域解放関数が正常に機能しない場合の、図1および図2に示す電子機器の動作を説明する図である。 動的なメモリ領域の確保および解放を説明するフローチャートである。 メモリリークの発生を説明するフローチャートである。
符号の説明
3 RAM(メモリ)
12 制御プログラム(プログラム,処理実行プログラム)
13 ライブラリ(メモリ管理プログラム)
22 機能制御部(処理手段)
23 メモリマネージャ(生存時間設定手段,解放漏れ検出手段,強制解放手段,メモリマネージャ,第2の解放漏れ検出手段)
24 デバッガ(解放漏れ情報出力手段,強制解放情報出力手段)

Claims (5)

  1. データを格納するためのメモリ領域を動的に確保しそのメモリ領域を使用して所定の処理を行う処理実行プログラムを実行するコンピュータ内蔵の電子機器において、
    メモリと、
    前記メモリにおけるメモリ領域を確保するメモリマネージャと、
    前記メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、
    前記処理実行プログラムの全部または一部が実行され実現される、前記所定の処理を実行する処理手段と、
    前記メモリマネージャによるメモリ領域の確保後の前記生存時間内にそのメモリ領域が解放されなかったことを検出する第1の解放漏れ検出手段と、
    前記生存時間内に前記メモリ領域が解放されなかったことが前記第1の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段と、
    を備え、
    前記第1の解放漏れ検出手段は、前記生存時間内に前記メモリ領域が解放されなかったことを検出した場合に、前記生存時間内にそのメモリ領域が解放されていないことを示す通知を前記処理手段へ発行し、
    前記処理手段は、前記第1の解放漏れ検出手段から前記通知を受け取ると、前記メモリマネージャに、前記メモリ領域を解放させるメモリ領域解放要求を発行し、このとき、前記処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、前記メモリ領域解放関数内に記述されている前記メモリ領域の解放要求の関数を実行し、
    前記メモリマネージャは、前記生存時間内に前記メモリ領域が解放されなかったことが前記第1の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、前記メモリ領域解放要求に応じて、前記メモリ領域を解放し、
    前記メモリ領域解放要求によって、前記強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第2の解放漏れ検出手段と、
    前記強制解放猶予時間内に前記メモリ領域が解放されなかったことが前記第2の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放する強制解放手段と、
    をさらに備えることを特徴とする電子機器。
  2. 前記メモリマネージャは、前記処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保し、
    前記生存時間設定手段は、前記メモリ領域確保要求に基づきそのメモリ領域の生存時間を前記処理手段に関連づけて設定する
    ことを特徴とする請求項1記載の電子機器。
  3. 前記強制解放手段により前記メモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段を備えることを特徴とする請求項1または2のいずれかに記載の電子機器。
  4. データを格納するためのメモリ領域を動的に確保しそのメモリ領域を使用して所定の処理を行う処理実行プログラムを実行するコンピュータを、
    メモリにおける前記メモリ領域を確保するメモリマネージャと、
    前記メモリ領域を確保する際にそのメモリ領域の生存時間を設定する生存時間設定手段と、
    前記処理実行プログラムの全部または一部が実行され実現される、前記所定の処理を実行する処理手段と、
    前記メモリマネージャによるメモリ領域の確保後の前記生存時間内にそのメモリ領域が解放されなかったことを検出する第1の解放漏れ検出手段と、
    前記生存時間内に前記メモリ領域が解放されなかったことが前記第1の解放漏れ検出手段により検出された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する解放漏れ情報出力手段、
    として機能させ、
    前記第1の解放漏れ検出手段は、前記生存時間内に前記メモリ領域が解放されなかったことを検出した場合に、前記生存時間内にそのメモリ領域が解放されていないことを示す通知を前記処理手段へ発行し、
    前記処理手段は、前記第1の解放漏れ検出手段から前記通知を受け取ると、前記メモリマネージャに、前記メモリ領域を解放させるメモリ領域解放要求を発行し、このとき、前記処理実行プログラムに含まれているメモリ領域解放関数を呼び出し、前記メモリ領域解放関数内に記述されている前記メモリ領域の解放要求の関数を実行し、
    前記メモリマネージャは、前記生存時間内に前記メモリ領域が解放されなかったことが前記第1の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放するのを猶予する強制解放猶予時間を設定し、前記メモリ領域解放要求に応じて、前記メモリ領域を解放し、
    前記コンピュータを、
    前記メモリ領域解放要求によって、前記強制解放猶予時間内にそのメモリ領域が解放されなかったことを検出する第2の解放漏れ検出手段と、
    前記強制解放猶予時間内に前記メモリ領域が解放されなかったことが前記第2の解放漏れ検出手段により検出された場合に、前記メモリ領域を強制的に解放する強制解放手段、
    としてさらに機能させるためのメモリ管理プログラム。
  5. 前記コンピュータを、
    前記強制解放手段により前記メモリ領域が強制的に解放された場合に、そのメモリ領域の位置を特定する情報および生存時間を出力する強制解放情報出力手段として機能させ、
    前記メモリマネージャは、前記処理手段によりメモリ領域確保要求が発行されると、要求されたメモリ領域を確保し、
    前記生存時間設定手段は、前記メモリ領域確保要求に基づきそのメモリ領域の生存時間を前記処理手段に関連づけて設定する
    ことを特徴とする請求項4記載のメモリ管理プログラム。
JP2007269548A 2007-10-16 2007-10-16 電子機器およびメモリ管理プログラム Expired - Fee Related JP5133649B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007269548A JP5133649B2 (ja) 2007-10-16 2007-10-16 電子機器およびメモリ管理プログラム
US12/204,276 US8280927B2 (en) 2007-10-16 2008-09-04 Electronic equipment and memory managing program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007269548A JP5133649B2 (ja) 2007-10-16 2007-10-16 電子機器およびメモリ管理プログラム

Publications (2)

Publication Number Publication Date
JP2009098910A JP2009098910A (ja) 2009-05-07
JP5133649B2 true JP5133649B2 (ja) 2013-01-30

Family

ID=40535261

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007269548A Expired - Fee Related JP5133649B2 (ja) 2007-10-16 2007-10-16 電子機器およびメモリ管理プログラム

Country Status (2)

Country Link
US (1) US8280927B2 (ja)
JP (1) JP5133649B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7216151B2 (ja) 2020-07-06 2023-01-31 ダイキン工業株式会社 冷凍装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2672390B1 (en) * 2011-01-31 2015-11-25 Mitsubishi Electric Corporation Memory controller
CN103135518B (zh) * 2011-12-02 2019-11-12 费希尔控制国际公司 程序流控制监控例程、与之相关的方法以及***
JP7337228B2 (ja) 2018-09-19 2023-09-01 キオクシア株式会社 メモリシステムおよび制御方法
JP7143232B2 (ja) 2019-01-29 2022-09-28 キオクシア株式会社 メモリシステムおよび制御方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04367951A (ja) * 1991-06-17 1992-12-21 Fujitsu Ltd メモリ滞留防止方式
JPH0696165A (ja) 1992-09-16 1994-04-08 Fuji Photo Film Co Ltd 画像処理方法及び装置
JPH1097435A (ja) * 1996-09-20 1998-04-14 Nec Corp 資源割当てシステム
JP2001282614A (ja) * 2000-03-31 2001-10-12 Oki Electric Ind Co Ltd メモリ管理方法
JP2002108698A (ja) * 2000-10-04 2002-04-12 Nissin Electric Co Ltd メモリ管理システム及びメモリ管理方法
JP3939975B2 (ja) 2001-12-14 2007-07-04 松下電器産業株式会社 ガベージコレクション装置、ガベージコレクション方法及びガベージコレクションプログラム
US7577943B2 (en) * 2003-10-24 2009-08-18 Microsoft Corporation Statistical memory leak detection
US20060085156A1 (en) * 2004-10-18 2006-04-20 Kolawa Adam K Method and system for predicting memory leaks from unit testing
US20070083721A1 (en) * 2005-09-28 2007-04-12 Siemens Aktiengesellschaft Memory management for a data processing system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7216151B2 (ja) 2020-07-06 2023-01-31 ダイキン工業株式会社 冷凍装置

Also Published As

Publication number Publication date
JP2009098910A (ja) 2009-05-07
US20090100116A1 (en) 2009-04-16
US8280927B2 (en) 2012-10-02

Similar Documents

Publication Publication Date Title
JP6516870B2 (ja) プログラム命令を安全に実行する方法及び該方法用プログラム
US9519495B2 (en) Timed API rules for runtime verification
US8327336B2 (en) Enhanced thread stepping
US7809985B2 (en) Offline hardware diagnostic environment
US20100231959A1 (en) Execution order determining device, execution order determining program, execution order determining circuit, and information processing device
JP5133649B2 (ja) 電子機器およびメモリ管理プログラム
JP2010086364A (ja) 情報処理装置、動作状態監視装置および方法
JP5359601B2 (ja) ダンプ出力制御装置、ダンプ出力制御プログラム、ダンプ出力制御方法
JP4992740B2 (ja) マルチプロセッサシステム、障害検出方法および障害検出プログラム
JP2010009296A (ja) ソフトウェア動作監視装置およびソフトウェア動作監視方法
US20110107072A1 (en) Method for self-diagnosing system management interrupt handler
KR100809291B1 (ko) 임베디드 소프트웨어의 api 테스트 방법 및 장치
KR20110095050A (ko) 공유 라이브러리 디버깅 장치
KR20140020287A (ko) 소프트웨어 조작성 서비스
JP2009223714A (ja) 演算回路及び演算回路の異常解析方法
KR20190116029A (ko) 시스템 온 칩 및 그 동작 방법
JP2009064125A (ja) サーバ装置、そのプログラム
JP5277217B2 (ja) 情報処理装置およびコンピュータープログラム
JP2015130023A (ja) 情報記録装置、情報処理装置、情報記録方法、及び情報記録プログラム
JP2010056744A (ja) 情報処理装置、画像形成装置及びプログラム
JPH10326203A (ja) 複数のハードウェア環境上においてプログラムを別々に動作させつつも、ハードウェア環境間で動作状態を継承し合うことができるデバッグ装置
JP2005338892A (ja) メモリ異常使用検知装置
JP2017199180A (ja) 画像処理装置
JP2007257395A (ja) アプリケーションの異常監視方法
JP5818831B2 (ja) 情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100927

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111220

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120220

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120313

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120705

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120801

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120911

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121108

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151116

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees