JPH09244948A - メモリリークの検出方法と装置 - Google Patents

メモリリークの検出方法と装置

Info

Publication number
JPH09244948A
JPH09244948A JP8321298A JP32129896A JPH09244948A JP H09244948 A JPH09244948 A JP H09244948A JP 8321298 A JP8321298 A JP 8321298A JP 32129896 A JP32129896 A JP 32129896A JP H09244948 A JPH09244948 A JP H09244948A
Authority
JP
Japan
Prior art keywords
memory
block
computer
function
memory allocation
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.)
Pending
Application number
JP8321298A
Other languages
English (en)
Inventor
Jeffrey M Donnelly
エム ドネリー ジェフリー
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.)
NCR International Inc
Original Assignee
NCR International 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 NCR International Inc filed Critical NCR International Inc
Publication of JPH09244948A publication Critical patent/JPH09244948A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 (修正有) 【課題】 プロセス内のメモリリークを正確で効率的に
検出するデバッギングのためのメモリ管理技術の提供。 【解決手段】 メモリの割当てや解除を追跡するメモリ
割当てテーブルに、ファイル名とライン番号に加えて、
満了イベントと従属ポインタを含む割当て解除情報を記
憶するようにする。満了イベントは、対応するメモリ割
当てがイベントの出現の前に割当て解除されているべき
であることを示す。従属ポインタはメモリの現在の割当
てを示し、本来の割当てが、従属ポインタにより参照さ
れるメモリの割当ての割当て解除の前に割当て解除され
ているべきであることを示す。メモリリークのチェック
はプログラムの所定のポイントにおいて行われ、その際
特に、そのポインタがメモリ割当てから割当て解除され
る出現あるいは従属したポインタを有する満了した満了
イベントを有したブロックに対してメモリ割当てテーブ
ルがチェックされる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は割当てられたコンピ
ュータメモリの管理技術に関し、特に、満了イベント
(expiration event)および従属ポインタ(dependent
pointer )を使用してコンピュータシステム上で実行さ
れるプログラム内におけるメモリリークを検出するため
の方法と装置に関するものである。
【0002】
【発明が解決しようとする課題】コンピュータのオペレ
ーティングシステムはコンピュータシステムにおけるメ
モリを動的に割当てながら、プログラム、つまり特定の
機能のために使用する各プロセスを実行する。特定の機
能の完了の際には、しかしながら、割当てられたメモリ
はしばしば、割当て解除されないことがあり、割当てら
れたメモリはプログラム内の他の機能のために使用不能
のままとなってしまう。このようなコンピュータ資源の
不必要な割当てはメモリリークと呼ばれる。同じ有罪の
(offending )機能が繰り返し実行される(あるいは他
の有罪の機能が実行される)際に、メモリリークの数が
増大し、プロセスのサイズが大きくなり、またコンピュ
ータメモリの消費がコンピュータシステムの限界に達す
るまで増大して、プロセスが異常終了してしまう。プロ
セスのサイズが増大すると、プログラムおよびコンピュ
ータシステム上に大きな負の性能の影響を与えるように
なる。よって、プログラマーにとっては、これらのメモ
リリークを消費者に製品としてリリースする前に検出し
取り除くことが重要である。メモリリークを検出するた
めの従来のシステムは一般的に信頼性がなく、あるいは
実施が困難なものであった。
【0003】プログラマーにメモリリークが最初に示さ
れるのは、プロセスが余分なコンピュータメモリを消費
して非常に大きくなることが通知されたときである。メ
モリリークを単に認識しているだけでは、メモリリーク
を簡単に検出しメモリリークを除去することは必ずしも
できない。メモリリークは、開発の間に非常にまれにし
か実行されないプログラムの機能である場合もある。し
かしながら、この機能は消費者側ではしばしば実行され
る機能であり、連続した期間だけプロセスが実行された
後に問題が生じる。
【0004】従来技術におけるメモリリークを検出する
ためのシステムは、一般的には、標準的なメモリ管理機
能をデバッキングメモリ管理機能に置き換えることから
構成されている。一般的には、これらのシステムは、包
括的すぎるか、あるいは包括的でない。つまり、これら
のシステムは、存在しないメモリリークを報告するか、
あるいは各メモリリークを報告できないものである。こ
のようなシステムの1つに、メモリ割当てをメモリ割当
て解除と釣り合わせたものがある。このシステムでは、
それらが割り当てられたリスト内においてメモリ割当て
に対するポインタを記録させること、およびメモリ割当
ての割当て解除の際にポインタを除去することを含んで
いる。メモリ割当ての次に、メモリ割当てのためになさ
れた要求の場所を示すファイル名とライン番号が同様に
記録される。プログラムの与えられたポイントにおい
て、あるいはプロセス終了において、リストがメモリリ
ークのために検査される。特に、リスト上に残っている
いずれかのポインタは、対応するメモリの割当て解除の
ないメモリ割当てを示しており、これが、この従来技術
のシステムにおいては、メモリリークであると考えられ
る。この解決法は、しかしながら、特に大きなプログラ
ムの場合には、不満足なものである。これは、いずれか
の時間内において、プログラムが数百もの使用中である
完全に有効なメモリ割当てを有しているにも拘らずメモ
リリークとして識別されてしまうためである。有効なメ
モリ割当てを除去することは手作業でリストを検査する
ことであり、実用上は困難であり、またプログラマーが
いくつかのメモリリークの前兆を見逃してしまうことに
もなる。
【0005】従来技術においてメモリリークを検出する
ための他の方法は、メモリ割当てテーブル内においてメ
モリを動的に割当てるための参照のためにプロセスデー
タ間隔を検査することを含むものである。プロセスデー
タ間隔は、変数、動的に割当てられたメモリおよびスタ
ックのような、プロセスデータのためにプロセスに代わ
ってオペレーティングシステムにより保守される記憶領
域である。メモリ割当てテーブルは、使用しないメモリ
および動的に割当てられるメモリを追跡するためのコン
ピュータのシステムの代わりにオペレーティングシステ
ムにより保守される記憶領域である。この従来技術の方
法では、メモリ割当てテーブル内でメモリを動的に割当
てるために、プロセスデータ間隔を走査している。プロ
セスデータ間隔として参照されない、メモリ割当てテー
ブル内において動的に割り当たられたいずれかのメモリ
は、メモリリークと考えられる。最初に説明した従来技
術の方法とは異なり、この方法は、動的に割当てられる
メモリに対する参照がスタックあるいは割当て解除され
たがクリアされないメモリ上に存在するときに、プロセ
スデータ間隔内で動的に割り当たられたメモリ(メモリ
割当てテーブル内で指摘された)に対する参照を単に検
査するだけであることから、各メモリリークを報告しな
い場合がしばしばある。
【0006】メモリリークを検出するための他の従来技
術の方法は、プロセスのデータ構造を通って全ての有効
なポインタをメモリ割当てに記録するプログラムの特別
の機能を(データ構造のために)リスト内に書き込むこ
とを含ものである。このリストは次いでメモリ割当てテ
ーブルと比較される。リスト内のものと合致しないメモ
リ割当てテーブル内のいずれかのメモリ割当てはメモリ
リークである。この解決法は、幾分は有効であるが、機
能がプログラムに特定され、また全ての既知のデータ構
造および有効なポインタを追跡し保守するものであり、
特に複雑なプログラムでは、困難であり、実用的ではな
い。
【0007】したがって、コンピュータシステム上で実
行されるプログラム内のメモリリークを検出するための
正確で効率的な方法および装置に対する要望がある。
【0008】本発明の目的は、プロセス内のメモリリー
クを正確で効率的な方法で検出する要望を満足すること
ができる、方法と装置を提供することにある。
【0009】
【課題を解決するための手段】本発明によれば、メモリ
管理機能を使用するコンピュータシステム上で実行され
るプログラム内におけるメモリリークを検出するための
方法であり、前記メモリ管理機能は、対応する要求ファ
イル情報(requesting file information )および割当
て解除情報を含む、前記コンピュータシステム内のコン
ピュータメモリの現在割当てられたブロックに関する情
報を記憶するためのメモリ割当てテーブルを照会および
保守するために動作するものにおいて、前記コンピュー
タメモリのブロックを要求する前記プログラム内の、前
記プログラムの基本的なプログラミングである機能のた
めにコンピュータメモリのブロックを割当てるステッ
プ、割当てられたコンピュータメモリの前記ブロックの
ための、現在割当てられた前記コンピュータメモリのブ
ロックがいつ割当て解除されるかを示した前記割当て解
除情報を特定するステップ、前記メモリ管理機能を使用
して前記メモリ割当てテーブル内の前記コンピュータメ
モリのブロックを要求する前記機能に対応する前記要求
ファイル情報および割当て解除情報を記憶するステッ
プ、割当て解除イベントを有する現在割り当てられた前
記コンピュータメモリのブロックのために前記メモリ管
理機能を使用して前記メモリ割当てテーブルを照会する
ことで、対応する割当て解除されるべき現在割り当てら
れた前記コンピュータメモリのブロックを指示するステ
ップからなることを特徴とする方法が提供される。
【0010】
【発明の実施の形態】以下に、添付図面を参照して、本
発明を詳細に説明する。
【0011】メモリ管理における問題を検出する最善の
解決法としての、本発明はデバッギングメモリ管理関数
のセットから構成される。特に、オペレーティングシス
テムのメモリ管理機能は、本発明のデバッギングメモリ
管理メモリ管理機能のセットで置き換えられる。
【0012】図1において、コンピュータシステム2
は、コンピュータユニット7、ディスプレイまたはビデ
オディスプレイ端末装置8および、キーボードのよう
な、入力装置10から構成される。コンピュータユニッ
ト7は、プロセッサ4およびメモリ6、およびその他の
要素を含んでいる。メモリ6はコンピュータシステム2
上で実行されるプログラムのためのデータ記憶を提供す
るための手段である。ディスプレイ8および入力装置1
0はコンピュータユニット7に電気的に接続されてい
る。コンピュータシステム2は、当業者には容易に分か
るが、例えば、ローカルエリアネットワークあるいはク
ライアントサーバ形態あるいはスタンドアロンシステム
マルチタスク、マルチユーザ環境の中央コンピュータシ
ステム(図示せず)に電気的に接続されたワークステー
ションである。
【0013】この例示において、オペレーティングシス
テムはUNIXである。UNIXのオペレーティングシ
ステム内に含まれるのはカーネルである。カーネルは、
メモリ6を含むハードウェア動作の各ファセットを管理
する、必須的に常駐制御プログラムである。カーネル
は、コンピュータシステム2がブートされパワーオンさ
れたときには自動的にメモリ6内にロードされ、またコ
ンピュータシステム2のブートされた期間の間はメモリ
6内に常駐する。
【0014】コンピュータ2上の全てのプロセスはメモ
リ6の使用を必要とする。メモリ6を管理するため、カ
ーネルは仮想メモリマネージャを含んでいる。仮想メモ
リマネージャは各プロセスに対するメモリのセクション
の割当てを制御する。システムをページングあるいはス
ワッピングする際に、仮想メモリマネージャは、仮想メ
モリマネージャがプロセスに対して物理的なメモリを割
当てするメモリをマッピングする。物理的なメモリが使
い尽くされたときには、オペレーティングシステムは、
公知のように、メモリ空間(room)を作るためにいくつ
かのプロセスをスワッピングあるいはページングする。
メモリ管理機能は、仮想メモリカネージャにより割当て
られたメモリのどの部分が使用されないかを追跡するた
めに採用され、プロセスのために新しいメモリを要求
し、またメモリを要求したプロセスによりもはや必要と
しないメモリを使用されないものとしてマーキングす
る。メモリのプロセスへの各割当ておよび割当て解除を
追跡するため、メモリ管理機能は、「メモリ割当てテー
ブル」と称されるテーブルを保守する。メモリ割当てテ
ーブルは基本的には、ファイル名やライン番号を含む使
用しないメモリおよび動的に割当てられたメモリのよう
な情報を記憶するための手段であり、プログラムのソー
スコードにおいて要求が対応する動的に割り当てされた
メモリに対して行われる。メモリ管理機能がメモリ割当
てテーブルを保守する方法は、当業界では公知である。
【0015】UNIXは、他のオペレーティングシステ
ムのように、メモリのブロックを動的に割当てるために
使用できるメモリ管理機能のセットを提供する。UNI
Xのメモリ管理既往は、メモリのブロックを割当てし、
再割当てし、また割当て解除する各機能を含んでいる。
本発明のデバッキングメモリ管理機能のセットは、対応
するメモリ割当てが割当て解除されたことを示すとき
に、割当て解除情報(ファイル名およびライン番号に加
えて)をメモリ割当てテーブルにパスする動作をするた
めに、UNIXオペレーティングシステムのメモリ管理
機能を拡張する。本発明のメモリ割当てテーブル割当て
解除された情報を記憶するために動作する。
【0016】割当て解除情報は満了イベントおよび従属
ポインタを含む。満了イベントは対応するメモリ割当て
が何時割当て解除されるかを示す出現(occurrence)で
ある。満了イベントに対応するメモリ割当てが、満了イ
ベントが出現したときに割り当て解除させない場合、メ
モリリークが存在している。従属ポインタはポインタ、
つまり、他のデータ要素の場所を、いずれかの先に動的
に割当てられたメモリに示すデータ要素である。従属ポ
インタにより参照されたメモリ割当ては、ここでは「親
メモリ割当て」と称する。従属ポインタの割当て解除情
報としての表示は、親メモリ割当ての割当て解除の前
に、対応するメモリ割当てが割当て解除されることを示
し、そうでない場合にはリークが存在している。
【0017】メモリ割当ては、限定されるものではない
が、以下の1つまたはそれより多くの分類を含んでい
る。常駐(permanent )、非常駐(transient)、持続
(prolonged )、および従属(dependent )。メモリ割
当ての各タイプおよび割当て解除情報の間の関係は以下
に説明する。常駐メモリ割当ては、決して割当て解除さ
れず、またメモリリークとは関連しないメモリ割当てで
ある。このタイプのメモリ割当ては決して出現しない満
了イベントと関連している。よって、常駐メモリ割当て
に関連したメモリリークはない。
【0018】非常駐メモリ割当ては、短期間に使用さ
れ、メモリ割当てを要求する機能または機能セットが完
了したときに割当て解除されるメモリ割当てである。持
続メモリ割当ては、拡張された時間の長さに対して使用
されるメモリ割当てである永続的なものではない。非常
駐メモリ割当てと同様に、持続メモリ割当ては、メモリ
割当てを要求する機能あるいは機能セットが完了したと
きに割当て解除される。非常駐メモリ割当ておよび持続
メモリ割当ては、コンピュータ装置あるいはプロセスの
動作状態に関連して出現する満了イベントと関連してい
る。例えば、満了イベントはユーザがキーボードにより
入力した出現、あるいはクライアントによるコンピュー
タシステムからの接続を絶つことである。
【0019】本発明の好ましい実施の形態においては、
満了イベント情報はメモリ割当てテーブル内に固有の数
値として記憶される。各固有の数値は、メモリ割当てに
対応する特定の満了イベントを示している。固有の数値
を参照するために記号名が使用される。例えば、記号名
「EVENT_NEVER」には固有の数値「−1」が
割当てられる。この固有の数値は、対応するメモリ割当
てが決して発生しない満了イベントを有していることを
示すために、メモリ割当てテーブル内に記憶される。同
様に、記号名「EVENT_INPUT」には、対応す
るメモリ割当てがキーボードからの入力があったときに
割当て解除されることを示す固有の数値「7」が割当て
られる。
【0020】従属メモリ割当ては、他の構造、すなわち
データオブジェクトの順序付けされたグループを含む変
数の一部であるメモリ割当てであり、これらの構造がも
はや使用されない場合、従属メモリ割当ては割当て解除
される。従属ポインタは、従属メモリ割当てが依存する
構造に対する特定のメモリ割当て、つまり親メモリ割当
てを示すために、従属メモリ割当てにより使用される。
全ての従属メモリ割当ては、親メモリ割当ての割当て解
除の前に割当て解除される。親メモリ割当てが従属メモ
リ割当ての割当て解除の前に割当て解除された場合、メ
モリリークが存在する。
【0021】図3は、一例としてのログオンプログラム
を使用した従属メモリ割当てを例示したものである。ユ
ーザがコンピュータシステムに接続したときには、メモ
リはLOGON構造31およびNAME構造32に対し
て割当てられる。ポインタUSER33はLOGON構
造31に対するメモリ割当てを示す。LOGON構造3
1は多くのポインタを含み、その1つは、NAME構造
32に対するメモリ割当てを示すポインタUSER_N
AME34である。ユーザがコンピュータシステムから
接続を絶ったときには、LOGON31構造に対するメ
モリ割当ては割当て解除され、またNAME32構造に
対するメモリ割当ての参照、つまりポインタUSER_
NAMEはなくなる。このことは、ポインタUSER_
NAME_34はポインタUSER_33に従属してお
り、USER_NAME_34へのメモリ割当てはUS
ER_33へのメモリ割当ての割当て解除の前に割当て
解除されなければならないことを意味する。
【0022】メモリテーブル内における、割当て解除情
報、つまり満了イベントおよび/または従属ポインタを
特定するために、本発明は、「memory_regi
ster()」として参照されるデバッギングメモリ管
理機能を導入した。memory_register
(ポインタ、満了イベント、従属ポインタ)は、「ポイ
ンタ」に対して先に動的に割当てられたメモリが「満了
イベント」および/または「従属ポインタ」と関連して
いることを特定している。満了イベントとだけ関連した
メモリ割当てに対しては、メモリ割当てが他の構造、つ
まり親メモリ割当てに依存していないことを示すため
に、「NULL」が従属ポインタ引数として指定され
る。同様に、従属ポインタだけに関連したメモリ割当て
は、満了イベント引数として「EVENT_NONE」
が指定される。ここで、「EVENT_NONE」は、
満了イベントが対応するメモリ割当てに関連していない
ことを示す固有の数値に対する記号名である。
【0023】本発明の1つの実施の形態では、メモリを
割当てるとともに満了イベントおよび/または従属ポイ
ンタを特定するために、memori_registe
r()機能を、malloc()として知られるUNI
Xメモリ管理機能と共に使用している。UNIXのma
lloc(サイズ)機能は、本発明において、最初にメ
モリのブロックを少なくとも「サイズ」バイトだけ割当
てるために利用している。malloc()機能がうま
くいった場合、動的に割当てられたメモリのブロックの
アドレスを特定するポインタがmalloc()機能の
値として戻される。memory_registe
r()機能が次いで、malloc()機能により割当
てられたメモリのブロックに対するメモリ割当てテーブ
ル内の満了イベントおよび/または従属ポインタ情報を
特定するために使用される。malloc()機能がう
まくいかなかった場合、「NULL」ポインタが戻され
る。ここで、本発明のmemory_register
()機能は、公知のUNIXcalloc()あるいは
realloc()機能のような、他のメモリ管理機能
と共に使用することもできる。
【0024】UNIXのmalloc()機能と共に本
発明を実施するためのプログラムに対する擬似コードは
例1(example 1)に例示されている。
【0025】\\example 1 01 p1=malloc(サイズ1) 02 p2=malloc(サイズ2) 03 memory_register(p2、EVE
NT_NONE、p1) ライン01と02は「サイズ1」と「サイズ2」のメモ
リのバイトをそれぞれ割当て、またメモリ割当てアドレ
スをポインタ「p1」と「p2」にそれぞれ戻してい
る。ライン03は、ポインタ「p1」により参照された
メモリ割当てに依存したポインタ「p2」により参照さ
れたメモリ割当てを特定している。この情報はメモリ割
当てテーブル内に記憶される。ここで、記号名「EVE
NT_NONE」は、満了イベントがポインタ「p2」
により参照されたメモリ割当てに関連していないことを
特定するために使用されている。
【0026】本発明の他の実施の形態においては、UN
IXオペレーティングシステムのメモリ管理機能が、満
了イベントおよび/または従属ポインタ情報を引数とし
て受けとり、またこれらをメモリ割当てテーブルに通過
させるために修正されている。例えば、新しい機能me
mory_malloc()はmalloc()と同じ
ように作られるが、満了イベントおよび従属ポインタ情
報を引数として含めるために修正される。つまり、me
mory_malloc(サイズ、満了イベント、従属
ポインタ)。memory_malloc()機能によ
り、例1のライン02と03は1つのラインに組み合わ
せることができる。例1の擬似コードは例2(exam
ple 2)のように書き替えられる。
【0027】\\example 2 01 p1=memory_malloc(大きさ1、
EVENT_NONE、NULL) 02 p2=memory_malloc(大きさ2、
EVENT_NONE、p1) ここで、ライン02はメモリの「サイズ2」バイトのブ
ロックを割当て、またポインタ「p2」により参照され
たメモリ割当てを、ポインタ「p1」により参照された
メモリ割当てに従属していることを特定している。機能
memory_mallocは製品リリース、つまり非
デバッギングリリースにおいてマクロであって良く、機
能memory_malloc()は標準のmallo
c()呼びに戻り、第2および第3の引数は破棄され
る。
【0028】メモリ割当てテーブル内に満了イベントお
よび/または従属ポインタが特定された場合、メモリリ
ークは、「memory_trigger()」および
「free()」として参照される本発明のデバッギン
グメモリ管理機能を使用して検出される。memory
_trigger(満了イベント)機能は、特定の「満
了イベント」が発生した際に、メモリ割当てを割当て解
除するためのプログラムの失敗により生じるメモリリー
クを検出するためにプログラムにより使用される。特
に、プログラムはmemory_trigger()機
能を、特定のイベントが発生し、またメモリ管理機能
が、特定された「満了イベント」上で満了するようにセ
ットされたメモリ割当てに対してメモリ割当てテーブル
を参照するために使用する。本発明の1つの実施の形態
においては、memory_trigger()機能も
同様に、特定の満了イベントの満了によって割当て解除
されるメモリ割当てに対応するファイル名とライン番号
のリストを戻す。
【0029】本発明のmemory_trigge
r()はイベントにイベントが発生したときを示すため
に戦略的にプログラム内に挿入される。特に、memo
ry_trigger()機能はプログラム内に、満了
イベントが発生する位置に置かれる。図2に、メモリリ
ークを検出するためにmemory_trigger
(満了イベント)を使用する例を例示した。図2におい
て、ユーザ要求を待ち、要求に機能でサービスし、また
次のユーザ要求を待つ、ことを行うプログラムに対する
フローダイヤグラムが示されている。
【0030】ステップ2aにおいて、プログラムはユー
ザが要求するのを待っている。要求があると、ステップ
2bにおいて、malloc()機能が「servic
e()」(要求を処理するために)として参照された機
能に対するメモリを割当て、また割当てられたメモリの
アドレスに戻る。service()機能が要求を処理
することを完了するとともにプログラムを待ち状態に戻
したとき、service()機能に対するメモリ割当
ては割当て解除される。プログラムが待ち状態に戻るポ
イントが割当て解除のポイントである。プログラムがユ
ーザの要求を待っている状態は、EVENT_WAIT
INGとして記号として参照され、これは定義された数
値、例えば12を有している。
【0031】ステップ2dはEVENT_WAITIN
Gを、service()機能に対して割当てられたメ
モリのための満了イベントとして特定している。ser
vice()機能はステップ2dにおいて実行され、ま
たプログラムは,満了イベントEVENT_WAITI
NGの発生をトリガするステップ2eにおいて待ち状態
に戻る。ステップ2fは、service()機能に割
当てられたメモリが割当て解除されたかどうかをチェッ
クするmemory_trigger()機能を実行す
る。符号名EVENT_WAITINGに割り当てられ
た数値に等しい満了イベントを有するメモリ割当てに対
し、メモリ管理機能がメモリ割当てテーブルを参照す
る。上記した判定基準にマッチしたメモリ割当てに対応
するファイル名およびライン番号が戻される。
【0032】本発明のfree()機能は公知のUNI
Xのfree()機能の変種である。UNIXのfre
e(ポインタ)機能と同様に、本発明のfee(ポイン
タ)機能はメモリ管理機能に、「ポインタ」により示さ
れた、先に動的に割当てられたメモリの領域を未使用の
メモリのプールに戻ることを指示する。さらに、「ポイ
ンタ」により参照されたメモリ割当てを割当て解除する
前に、本発明のfree()機能はメモリ管理機能に対
して、割当て解除される「ポインタ」により参照された
メモリ割当てに従属しているメモリ割当てがあるかどう
かを決定するために、メモリ割当てテーブルを参照する
ように指示する。見出だされたこのようなメモリ割当て
はメモリリークである。本発明の好ましい実施の形態に
おいて、free()機能はまた、割当て解除されつつ
あるメモリ割当てに従属するメモリ割当てのリストに戻
される。
【0033】例3(Example 3)は、図3に示
された場所のメモリリークを検出するために本発明のf
ree()機能を実行するための擬似コードを示したも
のである。
【0034】\\Example 3 81 USER_33=memory_malloc
(サイズ1、EVENT_NONE、NULL) 82 USER_NAME_34=memory_ma
lloc(サイズ2、EVENT_NONE、USER
_33) 83 free(USER_33) 例3および図3を参照して、ライン81は「サイズ1」
バイトのメモリをLOGON構造31に割当て、またポ
インタUSER_33に戻る。ライン82はNAME構
造32に対して「サイズ2」バイトのメモリを割当て、
ポインタUSER_33により参照されたメモリ割当て
に、つまりLOGON構造31に対するメモリ割当てに
従属して割当てられたメモリを特定し、またポインタU
SER_NAME_34に戻る。ライン83は、ポイン
タUSER_33により参照されたメモリ割当てに従属
するメモリ割当て、つまり割当て解除されつつある、L
OGON31構造に対するメモリ割当てがあるかどうか
決定するために、本発明のfree()機能を実行して
いる。本発明のfree()機能は次いで、標準のUN
IXのメモリ管理fee()関数が行うように、メモリ
を割当て解除する。NAME構造32に対するメモリ割
当てが割当て解除されていないので、本発明のfree
()機能は、メモリ割当てテーブル内のUSER_NA
ME_34により指摘されたNAME構造32に対する
メモリ割当てを、メモリリークとして検出する。
【図面の簡単な説明】
【図1】 本発明のメモリリーク検出システムを示した
説明図である。
【図2】 ユーザ要求を待ち、要求を機能でサービス
し、また次いで,次のユーザ要求を待つためのプログラ
ム内のメモリリークを検出するためのフローチャートで
ある。
【図3】 一例としてログオンを使用して従属メモリ割
当てを示した説明図である。
【符号の説明】
2 コンピュータシステム 4 プロセッサ 6 メモリ 7 コンピュータユニット

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 メモリ管理機能を使用するコンピュータ
    システム上で実行されるプログラム内におけるメモリリ
    ークを検出するための方法であり、前記メモリ管理機能
    は、対応する要求ファイル情報および割当て解除情報を
    含む、前記コンピュータシステム内のコンピュータメモ
    リの現在割当てられたブロックに関する情報を記憶する
    ためのメモリ割当てテーブルを照会および保守するため
    に動作するものにおいて、 前記コンピュータメモリのブロックを要求する前記プロ
    グラム内の、前記プログラムの基本的なプログラミング
    である機能のためにコンピュータメモリのブロックを割
    当てるステップ、 割当てられたコンピュータメモリの前記ブロックのため
    の、現在割当てられた前記コンピュータメモリのブロッ
    クがいつ割当て解除されるかを示した前記割当て解除情
    報を特定するステップ、 前記メモリ管理機能を使用して前記メモリ割当てテーブ
    ル内の前記コンピュータメモリのブロックを要求する前
    記機能に対応する前記要求ファイル情報および割当て解
    除情報を記憶するステップ、 割当て解除イベントを有する現在割り当てられた前記コ
    ンピュータメモリのブロックのために前記メモリ管理機
    能を使用して前記メモリ割当てテーブルを照会すること
    で、対応する割当て解除されるべき現在割り当てられた
    前記コンピュータメモリのブロックを指示するステップ
    からなることを特徴とするメモリリークの検出方法。
  2. 【請求項2】 コンピュータメモリのブロックを有する
    コンピュータシステム上で実行される、少なくとも1つ
    の機能からなるプログラム内のメモリリークを検出する
    ための装置において、 前記コンピュータメモリのブロックを要求する前記機能
    のためにコンピュータメモリのブロックを割当てするた
    めの仮想メモリマネージャ、 要求ファイル情報および現在割り当てられたコンピュー
    タメモリのブロックに対応する、現在割り当てられたコ
    ンピュータメモリのブロックがいつ割当て解除されるの
    かを示す割当て解除情報を記憶するために動作するメモ
    リ割当てテーブル、 前記メモリ割当てテーブル内で割当てられた前記コンピ
    ュータメモリのブロックのための割当て解除情報を特定
    するための手段、 対応する現在割り当てられた前記コンピュータメモリの
    ブロックが割当て解除されることを示す割当て解除イベ
    ントを有する現在選択された前記コンピュータメモリの
    ブロックに対して前記メモリ割当てテーブルを照会する
    ためのデバッギングメモリ管理手段からなることを特徴
    とするメモリリークの検出装置。
JP8321298A 1995-12-04 1996-12-02 メモリリークの検出方法と装置 Pending JPH09244948A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/566,768 US5689707A (en) 1995-12-04 1995-12-04 Method and apparatus for detecting memory leaks using expiration events and dependent pointers to indicate when a memory allocation should be de-allocated
US08/566,768 1995-12-04

Publications (1)

Publication Number Publication Date
JPH09244948A true JPH09244948A (ja) 1997-09-19

Family

ID=24264306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8321298A Pending JPH09244948A (ja) 1995-12-04 1996-12-02 メモリリークの検出方法と装置

Country Status (3)

Country Link
US (1) US5689707A (ja)
EP (1) EP0778525A1 (ja)
JP (1) JPH09244948A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010061230A (ja) * 2008-09-01 2010-03-18 Canon Inc 情報処理装置及び情報処理方法
KR100965426B1 (ko) * 2008-04-24 2010-06-24 주식회사 파수닷컴 메모리 누수 검출 장치 및 방법
KR101357397B1 (ko) * 2011-11-18 2014-02-03 애플 인크. 데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법
US9465701B2 (en) 2011-04-20 2016-10-11 Fujitsu Limited Relay device and recovery method

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5923877A (en) * 1996-05-01 1999-07-13 Electronic Data Systems Corporation Object-oriented programming memory management framework and method
US6064811A (en) * 1996-06-17 2000-05-16 Network Associates, Inc. Computer memory conservation system
US5842019A (en) * 1996-09-13 1998-11-24 Parasoft Corporation Method and system for dynamically detecting leaked memory space in a computer program
US6023712A (en) * 1997-07-30 2000-02-08 Quarterdeck Corporation Method and apparatus for brokering memory resources
US6070202A (en) * 1998-05-11 2000-05-30 Motorola, Inc. Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size
US6125434A (en) * 1998-05-19 2000-09-26 Northorp Grumman Corporation Dynamic memory reclamation without compiler or linker assistance
ATE323305T1 (de) * 1998-07-24 2006-04-15 Sun Microsystems Inc Verfahren und vorrichtung zur durchführung einer deterministischen speicherzuordnungsantwort in einem computer-system
US6804239B1 (en) * 1999-08-17 2004-10-12 Mindspeed Technologies, Inc. Integrated circuit that processes communication packets with co-processor circuitry to correlate a packet stream with context information
US6594774B1 (en) * 1999-09-07 2003-07-15 Microsoft Corporation Method and apparatus for monitoring computer system objects to improve system reliability
US7111307B1 (en) 1999-11-23 2006-09-19 Microsoft Corporation Method and system for monitoring and verifying software drivers using system resources including memory allocation and access
US6523141B1 (en) * 2000-02-25 2003-02-18 Sun Microsystems, Inc. Method and apparatus for post-mortem kernel memory leak detection
US6658653B1 (en) * 2000-06-08 2003-12-02 International Business Machines Corporation Debugging methods for heap misuse
US6658652B1 (en) * 2000-06-08 2003-12-02 International Business Machines Corporation Method and system for shadow heap memory leak detection and other heap analysis in an object-oriented environment during real-time trace processing
US6463515B1 (en) 2000-06-23 2002-10-08 Dell Products L.P. System and method for recovering physical memory locations in a computer system
EP1237080A1 (de) * 2001-03-02 2002-09-04 Siemens Aktiengesellschaft Überprüfung eines Computersystems auf gesperrte Speicherbereiche nach einem Abbruch eines Prozesses
US6874072B2 (en) * 2001-03-23 2005-03-29 International Business Machines Corporation Method, apparatus and article of manufacture for managing a reusable linear access storage medium
US7093097B2 (en) * 2001-11-27 2006-08-15 International Business Machines Corporation Dynamic self-tuning memory management method and system
US7203720B2 (en) * 2002-11-27 2007-04-10 Bea Systems, Inc. Web server hit multiplier and redirector
US6954826B2 (en) * 2003-05-21 2005-10-11 Freescale Semiconductor, Inc. Read access and storage circuitry read allocation applicable to a cache
US7343513B1 (en) * 2003-09-24 2008-03-11 Juniper Networks, Inc. Systems and methods for recovering memory
US7302542B1 (en) * 2003-11-14 2007-11-27 Sun Microsystems, Inc. Mechanism for dynamically-allocated variables in an arbitrary-context tracing framework
US7761852B2 (en) * 2003-11-26 2010-07-20 International Business Machines Corporation Fast detection of the origins of memory leaks when using pooled resources
US7496615B2 (en) * 2004-03-11 2009-02-24 International Business Machines Corporation Method, system and article for detecting critical memory leaks causing out-of-memory errors in Java software
US7487321B2 (en) * 2004-04-19 2009-02-03 Cisco Technology, Inc. Method and system for memory leak detection
US7930491B1 (en) 2004-04-19 2011-04-19 Cisco Technology, Inc. Memory corruption detection system and method using contingency analysis regulation
US7293142B1 (en) 2004-04-19 2007-11-06 Cisco Technology, Inc. Memory leak detection system and method using contingency analysis
US20060085156A1 (en) * 2004-10-18 2006-04-20 Kolawa Adam K Method and system for predicting memory leaks from unit testing
US7526754B2 (en) * 2005-02-28 2009-04-28 Sap Portals Israel Ltd. Memory debugging tool
CN100392606C (zh) * 2005-07-14 2008-06-04 中兴通讯股份有限公司 一种定位虚拟操作系统内存泄漏的方法
US7774741B2 (en) * 2006-05-22 2010-08-10 Microsoft Corporation Automatically resource leak diagnosis and detecting process within the operating system
DE102006029138A1 (de) * 2006-06-22 2007-12-27 Dspace Digital Signal Processing And Control Engineering Gmbh Verfahren und Computerprogrammprodukt zur Detektion von Speicherlecks
US7500079B2 (en) * 2006-07-31 2009-03-03 Microsoft Corporation Detection of memory leaks
CN100504807C (zh) * 2006-10-13 2009-06-24 中兴通讯股份有限公司 一种通信设备系统中内存泄漏的检测方法
US20080288725A1 (en) * 2007-05-14 2008-11-20 Moyer William C Method and apparatus for cache transactions in a data processing system
US7793161B2 (en) * 2007-05-29 2010-09-07 International Business Machines Corporation Method and apparatus to anticipate memory exhaustion in an open services gateway initiative environment
JP5031470B2 (ja) * 2007-07-19 2012-09-19 株式会社日立製作所 メモリ管理方法、情報処理装置及びメモリ管理プログラム
CN101639804A (zh) * 2008-07-29 2010-02-03 国际商业机器公司 确定程序中的内存泄漏位置的方法和装置
US9021220B2 (en) * 2012-08-01 2015-04-28 International Business Machines Corporation Orphan storage release
US9471237B1 (en) * 2015-02-04 2016-10-18 Amazon Technologies, Inc. Memory consumption tracking
US9852046B1 (en) * 2015-05-07 2017-12-26 Cadence Design Systems, Inc. Method and system for automated debugging memory allocation and memory release
CN107908539B (zh) * 2017-07-24 2020-07-17 平安科技(深圳)有限公司 一种检测应用程序内存泄露的方法、终端及计算机可读存储介质

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3593315A (en) * 1969-09-17 1971-07-13 Burroughs Corp Method and apparatus for deallocating small memory spaces assigned to a computer program
US4660130A (en) * 1984-07-24 1987-04-21 Texas Instruments Incorporated Method for managing virtual memory to separate active and stable memory blocks
US4775932A (en) * 1984-07-31 1988-10-04 Texas Instruments Incorporated Computer memory system with parallel garbage collection independent from an associated user processor
US4758944A (en) * 1984-08-24 1988-07-19 Texas Instruments Incorporated Method for managing virtual memory to separate active and stable memory blocks
GB8613069D0 (en) * 1986-05-29 1986-07-02 Univ Manchester Parallel storage allocation
US4907151A (en) * 1988-09-30 1990-03-06 Digital Equipment Corporation System and method for garbage collection with ambiguous roots
JPH02311935A (ja) * 1989-05-29 1990-12-27 Fuji Photo Film Co Ltd メモリカードの記憶管理方式
JPH06105440B2 (ja) * 1990-03-08 1994-12-21 株式会社日立製作所 主メモリ管理方法
US5355483A (en) * 1991-07-18 1994-10-11 Next Computers Asynchronous garbage collection
WO1993003435A1 (en) * 1991-08-08 1993-02-18 Pure Software, Inc. Method and apparatus for identifying memory leaks and tracking pointers in a computer program
US5398334A (en) * 1992-04-06 1995-03-14 General Electric Company System for automatic garbage collection using strong and weak encapsulated pointers
CA2119788C (en) * 1992-07-24 1996-12-31 Peter L. Morse Computer method and system for allocating and freeing memory
US5465351A (en) * 1992-08-14 1995-11-07 Noblenet Inc. Client-side memory management process for client-server computing
US5491808A (en) * 1992-09-30 1996-02-13 Conner Peripherals, Inc. Method for tracking memory allocation in network file server
US5561785A (en) * 1992-10-29 1996-10-01 International Business Machines Corporation System for allocating and returning storage and collecting garbage using subpool of available blocks
US5471604A (en) * 1992-10-30 1995-11-28 Intel Corporation Method for locating sector data in a memory disk by examining a plurality of headers near an initial pointer
US5408650A (en) * 1993-06-29 1995-04-18 Digital Equipment Corporation Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100965426B1 (ko) * 2008-04-24 2010-06-24 주식회사 파수닷컴 메모리 누수 검출 장치 및 방법
JP2010061230A (ja) * 2008-09-01 2010-03-18 Canon Inc 情報処理装置及び情報処理方法
US9465701B2 (en) 2011-04-20 2016-10-11 Fujitsu Limited Relay device and recovery method
KR101357397B1 (ko) * 2011-11-18 2014-02-03 애플 인크. 데이터 프로세싱 시스템의 메모리 사용을 추적하는 방법
US8949518B2 (en) 2011-11-18 2015-02-03 Apple Inc. Method for tracking memory usages of a data processing system

Also Published As

Publication number Publication date
US5689707A (en) 1997-11-18
EP0778525A1 (en) 1997-06-11

Similar Documents

Publication Publication Date Title
JPH09244948A (ja) メモリリークの検出方法と装置
US6125434A (en) Dynamic memory reclamation without compiler or linker assistance
US7155586B1 (en) Method of allowing point-in-time view of data on a disk using a map on cache disk
US6542978B2 (en) Externally identifiable descriptor for standard memory allocation interface
JP4718683B2 (ja) コンピュータ内のアプリケーションプログラム間でフォーカスが変更されたときに物理メモリの状態を復元する方法およびシステム
US5559980A (en) Method and apparatus for detecting references to deallocated memory in a dynamic memory allocation system
US6105040A (en) Method and apparatus for managing stored objects
US6470436B1 (en) Eliminating memory fragmentation and garbage collection from the process of managing dynamically allocated memory
EP0566243A1 (en) Free memory cell management system
JP2001517829A (ja) 仮想記憶システムにおいてアプリケーションプログラムによってコードまたはデータをグループに分類して、物理メモリの割り振りの制御を行うアプリケーション・プログラミング・インターフェイス
US6360233B1 (en) Dynamic memory space allocation
US6801990B2 (en) Demand-based memory-block splitting
US7565645B2 (en) Method and apparatus for marking code for data versioning
US6463515B1 (en) System and method for recovering physical memory locations in a computer system
US6457111B1 (en) Method and system for allocation of a persistence indicator for an object in an object-oriented environment
GB2359386A (en) Replicated control block handles for fault tolerant computer systems
US20060161601A1 (en) Heap manager and application programming interface support for managing versions of objects
US20060161602A1 (en) Object based access application programming interface for data versioning
KR20030044319A (ko) 실시간 운영체제의 메모리 할당/해제 디버깅 방법
KR100401560B1 (ko) 운영체제의 커널 스택 동적 할당 방법
JP3061001B2 (ja) 計算機システムにおけるメモリ割り当て方式
JPH08328944A (ja) メモリ管理方式
JP2535584B2 (ja) 実記憶固定処理計算機
JPH11212858A (ja) メモリプール領域管理方法及び装置
JPH04242847A (ja) セグメントのロールイン/ロールアウト方式