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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software 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 )を使用してコンピュータシステム上で実行さ
れるプログラム内におけるメモリリークを検出するため
の方法と装置に関するものである。
ュータメモリの管理技術に関し、特に、満了イベント
(expiration event)および従属ポインタ(dependent
pointer )を使用してコンピュータシステム上で実行さ
れるプログラム内におけるメモリリークを検出するため
の方法と装置に関するものである。
【0002】
【発明が解決しようとする課題】コンピュータのオペレ
ーティングシステムはコンピュータシステムにおけるメ
モリを動的に割当てながら、プログラム、つまり特定の
機能のために使用する各プロセスを実行する。特定の機
能の完了の際には、しかしながら、割当てられたメモリ
はしばしば、割当て解除されないことがあり、割当てら
れたメモリはプログラム内の他の機能のために使用不能
のままとなってしまう。このようなコンピュータ資源の
不必要な割当てはメモリリークと呼ばれる。同じ有罪の
(offending )機能が繰り返し実行される(あるいは他
の有罪の機能が実行される)際に、メモリリークの数が
増大し、プロセスのサイズが大きくなり、またコンピュ
ータメモリの消費がコンピュータシステムの限界に達す
るまで増大して、プロセスが異常終了してしまう。プロ
セスのサイズが増大すると、プログラムおよびコンピュ
ータシステム上に大きな負の性能の影響を与えるように
なる。よって、プログラマーにとっては、これらのメモ
リリークを消費者に製品としてリリースする前に検出し
取り除くことが重要である。メモリリークを検出するた
めの従来のシステムは一般的に信頼性がなく、あるいは
実施が困難なものであった。
ーティングシステムはコンピュータシステムにおけるメ
モリを動的に割当てながら、プログラム、つまり特定の
機能のために使用する各プロセスを実行する。特定の機
能の完了の際には、しかしながら、割当てられたメモリ
はしばしば、割当て解除されないことがあり、割当てら
れたメモリはプログラム内の他の機能のために使用不能
のままとなってしまう。このようなコンピュータ資源の
不必要な割当てはメモリリークと呼ばれる。同じ有罪の
(offending )機能が繰り返し実行される(あるいは他
の有罪の機能が実行される)際に、メモリリークの数が
増大し、プロセスのサイズが大きくなり、またコンピュ
ータメモリの消費がコンピュータシステムの限界に達す
るまで増大して、プロセスが異常終了してしまう。プロ
セスのサイズが増大すると、プログラムおよびコンピュ
ータシステム上に大きな負の性能の影響を与えるように
なる。よって、プログラマーにとっては、これらのメモ
リリークを消費者に製品としてリリースする前に検出し
取り除くことが重要である。メモリリークを検出するた
めの従来のシステムは一般的に信頼性がなく、あるいは
実施が困難なものであった。
【0003】プログラマーにメモリリークが最初に示さ
れるのは、プロセスが余分なコンピュータメモリを消費
して非常に大きくなることが通知されたときである。メ
モリリークを単に認識しているだけでは、メモリリーク
を簡単に検出しメモリリークを除去することは必ずしも
できない。メモリリークは、開発の間に非常にまれにし
か実行されないプログラムの機能である場合もある。し
かしながら、この機能は消費者側ではしばしば実行され
る機能であり、連続した期間だけプロセスが実行された
後に問題が生じる。
れるのは、プロセスが余分なコンピュータメモリを消費
して非常に大きくなることが通知されたときである。メ
モリリークを単に認識しているだけでは、メモリリーク
を簡単に検出しメモリリークを除去することは必ずしも
できない。メモリリークは、開発の間に非常にまれにし
か実行されないプログラムの機能である場合もある。し
かしながら、この機能は消費者側ではしばしば実行され
る機能であり、連続した期間だけプロセスが実行された
後に問題が生じる。
【0004】従来技術におけるメモリリークを検出する
ためのシステムは、一般的には、標準的なメモリ管理機
能をデバッキングメモリ管理機能に置き換えることから
構成されている。一般的には、これらのシステムは、包
括的すぎるか、あるいは包括的でない。つまり、これら
のシステムは、存在しないメモリリークを報告するか、
あるいは各メモリリークを報告できないものである。こ
のようなシステムの1つに、メモリ割当てをメモリ割当
て解除と釣り合わせたものがある。このシステムでは、
それらが割り当てられたリスト内においてメモリ割当て
に対するポインタを記録させること、およびメモリ割当
ての割当て解除の際にポインタを除去することを含んで
いる。メモリ割当ての次に、メモリ割当てのためになさ
れた要求の場所を示すファイル名とライン番号が同様に
記録される。プログラムの与えられたポイントにおい
て、あるいはプロセス終了において、リストがメモリリ
ークのために検査される。特に、リスト上に残っている
いずれかのポインタは、対応するメモリの割当て解除の
ないメモリ割当てを示しており、これが、この従来技術
のシステムにおいては、メモリリークであると考えられ
る。この解決法は、しかしながら、特に大きなプログラ
ムの場合には、不満足なものである。これは、いずれか
の時間内において、プログラムが数百もの使用中である
完全に有効なメモリ割当てを有しているにも拘らずメモ
リリークとして識別されてしまうためである。有効なメ
モリ割当てを除去することは手作業でリストを検査する
ことであり、実用上は困難であり、またプログラマーが
いくつかのメモリリークの前兆を見逃してしまうことに
もなる。
ためのシステムは、一般的には、標準的なメモリ管理機
能をデバッキングメモリ管理機能に置き換えることから
構成されている。一般的には、これらのシステムは、包
括的すぎるか、あるいは包括的でない。つまり、これら
のシステムは、存在しないメモリリークを報告するか、
あるいは各メモリリークを報告できないものである。こ
のようなシステムの1つに、メモリ割当てをメモリ割当
て解除と釣り合わせたものがある。このシステムでは、
それらが割り当てられたリスト内においてメモリ割当て
に対するポインタを記録させること、およびメモリ割当
ての割当て解除の際にポインタを除去することを含んで
いる。メモリ割当ての次に、メモリ割当てのためになさ
れた要求の場所を示すファイル名とライン番号が同様に
記録される。プログラムの与えられたポイントにおい
て、あるいはプロセス終了において、リストがメモリリ
ークのために検査される。特に、リスト上に残っている
いずれかのポインタは、対応するメモリの割当て解除の
ないメモリ割当てを示しており、これが、この従来技術
のシステムにおいては、メモリリークであると考えられ
る。この解決法は、しかしながら、特に大きなプログラ
ムの場合には、不満足なものである。これは、いずれか
の時間内において、プログラムが数百もの使用中である
完全に有効なメモリ割当てを有しているにも拘らずメモ
リリークとして識別されてしまうためである。有効なメ
モリ割当てを除去することは手作業でリストを検査する
ことであり、実用上は困難であり、またプログラマーが
いくつかのメモリリークの前兆を見逃してしまうことに
もなる。
【0005】従来技術においてメモリリークを検出する
ための他の方法は、メモリ割当てテーブル内においてメ
モリを動的に割当てるための参照のためにプロセスデー
タ間隔を検査することを含むものである。プロセスデー
タ間隔は、変数、動的に割当てられたメモリおよびスタ
ックのような、プロセスデータのためにプロセスに代わ
ってオペレーティングシステムにより保守される記憶領
域である。メモリ割当てテーブルは、使用しないメモリ
および動的に割当てられるメモリを追跡するためのコン
ピュータのシステムの代わりにオペレーティングシステ
ムにより保守される記憶領域である。この従来技術の方
法では、メモリ割当てテーブル内でメモリを動的に割当
てるために、プロセスデータ間隔を走査している。プロ
セスデータ間隔として参照されない、メモリ割当てテー
ブル内において動的に割り当たられたいずれかのメモリ
は、メモリリークと考えられる。最初に説明した従来技
術の方法とは異なり、この方法は、動的に割当てられる
メモリに対する参照がスタックあるいは割当て解除され
たがクリアされないメモリ上に存在するときに、プロセ
スデータ間隔内で動的に割り当たられたメモリ(メモリ
割当てテーブル内で指摘された)に対する参照を単に検
査するだけであることから、各メモリリークを報告しな
い場合がしばしばある。
ための他の方法は、メモリ割当てテーブル内においてメ
モリを動的に割当てるための参照のためにプロセスデー
タ間隔を検査することを含むものである。プロセスデー
タ間隔は、変数、動的に割当てられたメモリおよびスタ
ックのような、プロセスデータのためにプロセスに代わ
ってオペレーティングシステムにより保守される記憶領
域である。メモリ割当てテーブルは、使用しないメモリ
および動的に割当てられるメモリを追跡するためのコン
ピュータのシステムの代わりにオペレーティングシステ
ムにより保守される記憶領域である。この従来技術の方
法では、メモリ割当てテーブル内でメモリを動的に割当
てるために、プロセスデータ間隔を走査している。プロ
セスデータ間隔として参照されない、メモリ割当てテー
ブル内において動的に割り当たられたいずれかのメモリ
は、メモリリークと考えられる。最初に説明した従来技
術の方法とは異なり、この方法は、動的に割当てられる
メモリに対する参照がスタックあるいは割当て解除され
たがクリアされないメモリ上に存在するときに、プロセ
スデータ間隔内で動的に割り当たられたメモリ(メモリ
割当てテーブル内で指摘された)に対する参照を単に検
査するだけであることから、各メモリリークを報告しな
い場合がしばしばある。
【0006】メモリリークを検出するための他の従来技
術の方法は、プロセスのデータ構造を通って全ての有効
なポインタをメモリ割当てに記録するプログラムの特別
の機能を(データ構造のために)リスト内に書き込むこ
とを含ものである。このリストは次いでメモリ割当てテ
ーブルと比較される。リスト内のものと合致しないメモ
リ割当てテーブル内のいずれかのメモリ割当てはメモリ
リークである。この解決法は、幾分は有効であるが、機
能がプログラムに特定され、また全ての既知のデータ構
造および有効なポインタを追跡し保守するものであり、
特に複雑なプログラムでは、困難であり、実用的ではな
い。
術の方法は、プロセスのデータ構造を通って全ての有効
なポインタをメモリ割当てに記録するプログラムの特別
の機能を(データ構造のために)リスト内に書き込むこ
とを含ものである。このリストは次いでメモリ割当てテ
ーブルと比較される。リスト内のものと合致しないメモ
リ割当てテーブル内のいずれかのメモリ割当てはメモリ
リークである。この解決法は、幾分は有効であるが、機
能がプログラムに特定され、また全ての既知のデータ構
造および有効なポインタを追跡し保守するものであり、
特に複雑なプログラムでは、困難であり、実用的ではな
い。
【0007】したがって、コンピュータシステム上で実
行されるプログラム内のメモリリークを検出するための
正確で効率的な方法および装置に対する要望がある。
行されるプログラム内のメモリリークを検出するための
正確で効率的な方法および装置に対する要望がある。
【0008】本発明の目的は、プロセス内のメモリリー
クを正確で効率的な方法で検出する要望を満足すること
ができる、方法と装置を提供することにある。
クを正確で効率的な方法で検出する要望を満足すること
ができる、方法と装置を提供することにある。
【0009】
【課題を解決するための手段】本発明によれば、メモリ
管理機能を使用するコンピュータシステム上で実行され
るプログラム内におけるメモリリークを検出するための
方法であり、前記メモリ管理機能は、対応する要求ファ
イル情報(requesting file information )および割当
て解除情報を含む、前記コンピュータシステム内のコン
ピュータメモリの現在割当てられたブロックに関する情
報を記憶するためのメモリ割当てテーブルを照会および
保守するために動作するものにおいて、前記コンピュー
タメモリのブロックを要求する前記プログラム内の、前
記プログラムの基本的なプログラミングである機能のた
めにコンピュータメモリのブロックを割当てるステッ
プ、割当てられたコンピュータメモリの前記ブロックの
ための、現在割当てられた前記コンピュータメモリのブ
ロックがいつ割当て解除されるかを示した前記割当て解
除情報を特定するステップ、前記メモリ管理機能を使用
して前記メモリ割当てテーブル内の前記コンピュータメ
モリのブロックを要求する前記機能に対応する前記要求
ファイル情報および割当て解除情報を記憶するステッ
プ、割当て解除イベントを有する現在割り当てられた前
記コンピュータメモリのブロックのために前記メモリ管
理機能を使用して前記メモリ割当てテーブルを照会する
ことで、対応する割当て解除されるべき現在割り当てら
れた前記コンピュータメモリのブロックを指示するステ
ップからなることを特徴とする方法が提供される。
管理機能を使用するコンピュータシステム上で実行され
るプログラム内におけるメモリリークを検出するための
方法であり、前記メモリ管理機能は、対応する要求ファ
イル情報(requesting file information )および割当
て解除情報を含む、前記コンピュータシステム内のコン
ピュータメモリの現在割当てられたブロックに関する情
報を記憶するためのメモリ割当てテーブルを照会および
保守するために動作するものにおいて、前記コンピュー
タメモリのブロックを要求する前記プログラム内の、前
記プログラムの基本的なプログラミングである機能のた
めにコンピュータメモリのブロックを割当てるステッ
プ、割当てられたコンピュータメモリの前記ブロックの
ための、現在割当てられた前記コンピュータメモリのブ
ロックがいつ割当て解除されるかを示した前記割当て解
除情報を特定するステップ、前記メモリ管理機能を使用
して前記メモリ割当てテーブル内の前記コンピュータメ
モリのブロックを要求する前記機能に対応する前記要求
ファイル情報および割当て解除情報を記憶するステッ
プ、割当て解除イベントを有する現在割り当てられた前
記コンピュータメモリのブロックのために前記メモリ管
理機能を使用して前記メモリ割当てテーブルを照会する
ことで、対応する割当て解除されるべき現在割り当てら
れた前記コンピュータメモリのブロックを指示するステ
ップからなることを特徴とする方法が提供される。
【0010】
【発明の実施の形態】以下に、添付図面を参照して、本
発明を詳細に説明する。
発明を詳細に説明する。
【0011】メモリ管理における問題を検出する最善の
解決法としての、本発明はデバッギングメモリ管理関数
のセットから構成される。特に、オペレーティングシス
テムのメモリ管理機能は、本発明のデバッギングメモリ
管理メモリ管理機能のセットで置き換えられる。
解決法としての、本発明はデバッギングメモリ管理関数
のセットから構成される。特に、オペレーティングシス
テムのメモリ管理機能は、本発明のデバッギングメモリ
管理メモリ管理機能のセットで置き換えられる。
【0012】図1において、コンピュータシステム2
は、コンピュータユニット7、ディスプレイまたはビデ
オディスプレイ端末装置8および、キーボードのよう
な、入力装置10から構成される。コンピュータユニッ
ト7は、プロセッサ4およびメモリ6、およびその他の
要素を含んでいる。メモリ6はコンピュータシステム2
上で実行されるプログラムのためのデータ記憶を提供す
るための手段である。ディスプレイ8および入力装置1
0はコンピュータユニット7に電気的に接続されてい
る。コンピュータシステム2は、当業者には容易に分か
るが、例えば、ローカルエリアネットワークあるいはク
ライアントサーバ形態あるいはスタンドアロンシステム
マルチタスク、マルチユーザ環境の中央コンピュータシ
ステム(図示せず)に電気的に接続されたワークステー
ションである。
は、コンピュータユニット7、ディスプレイまたはビデ
オディスプレイ端末装置8および、キーボードのよう
な、入力装置10から構成される。コンピュータユニッ
ト7は、プロセッサ4およびメモリ6、およびその他の
要素を含んでいる。メモリ6はコンピュータシステム2
上で実行されるプログラムのためのデータ記憶を提供す
るための手段である。ディスプレイ8および入力装置1
0はコンピュータユニット7に電気的に接続されてい
る。コンピュータシステム2は、当業者には容易に分か
るが、例えば、ローカルエリアネットワークあるいはク
ライアントサーバ形態あるいはスタンドアロンシステム
マルチタスク、マルチユーザ環境の中央コンピュータシ
ステム(図示せず)に電気的に接続されたワークステー
ションである。
【0013】この例示において、オペレーティングシス
テムはUNIXである。UNIXのオペレーティングシ
ステム内に含まれるのはカーネルである。カーネルは、
メモリ6を含むハードウェア動作の各ファセットを管理
する、必須的に常駐制御プログラムである。カーネル
は、コンピュータシステム2がブートされパワーオンさ
れたときには自動的にメモリ6内にロードされ、またコ
ンピュータシステム2のブートされた期間の間はメモリ
6内に常駐する。
テムはUNIXである。UNIXのオペレーティングシ
ステム内に含まれるのはカーネルである。カーネルは、
メモリ6を含むハードウェア動作の各ファセットを管理
する、必須的に常駐制御プログラムである。カーネル
は、コンピュータシステム2がブートされパワーオンさ
れたときには自動的にメモリ6内にロードされ、またコ
ンピュータシステム2のブートされた期間の間はメモリ
6内に常駐する。
【0014】コンピュータ2上の全てのプロセスはメモ
リ6の使用を必要とする。メモリ6を管理するため、カ
ーネルは仮想メモリマネージャを含んでいる。仮想メモ
リマネージャは各プロセスに対するメモリのセクション
の割当てを制御する。システムをページングあるいはス
ワッピングする際に、仮想メモリマネージャは、仮想メ
モリマネージャがプロセスに対して物理的なメモリを割
当てするメモリをマッピングする。物理的なメモリが使
い尽くされたときには、オペレーティングシステムは、
公知のように、メモリ空間(room)を作るためにいくつ
かのプロセスをスワッピングあるいはページングする。
メモリ管理機能は、仮想メモリカネージャにより割当て
られたメモリのどの部分が使用されないかを追跡するた
めに採用され、プロセスのために新しいメモリを要求
し、またメモリを要求したプロセスによりもはや必要と
しないメモリを使用されないものとしてマーキングす
る。メモリのプロセスへの各割当ておよび割当て解除を
追跡するため、メモリ管理機能は、「メモリ割当てテー
ブル」と称されるテーブルを保守する。メモリ割当てテ
ーブルは基本的には、ファイル名やライン番号を含む使
用しないメモリおよび動的に割当てられたメモリのよう
な情報を記憶するための手段であり、プログラムのソー
スコードにおいて要求が対応する動的に割り当てされた
メモリに対して行われる。メモリ管理機能がメモリ割当
てテーブルを保守する方法は、当業界では公知である。
リ6の使用を必要とする。メモリ6を管理するため、カ
ーネルは仮想メモリマネージャを含んでいる。仮想メモ
リマネージャは各プロセスに対するメモリのセクション
の割当てを制御する。システムをページングあるいはス
ワッピングする際に、仮想メモリマネージャは、仮想メ
モリマネージャがプロセスに対して物理的なメモリを割
当てするメモリをマッピングする。物理的なメモリが使
い尽くされたときには、オペレーティングシステムは、
公知のように、メモリ空間(room)を作るためにいくつ
かのプロセスをスワッピングあるいはページングする。
メモリ管理機能は、仮想メモリカネージャにより割当て
られたメモリのどの部分が使用されないかを追跡するた
めに採用され、プロセスのために新しいメモリを要求
し、またメモリを要求したプロセスによりもはや必要と
しないメモリを使用されないものとしてマーキングす
る。メモリのプロセスへの各割当ておよび割当て解除を
追跡するため、メモリ管理機能は、「メモリ割当てテー
ブル」と称されるテーブルを保守する。メモリ割当てテ
ーブルは基本的には、ファイル名やライン番号を含む使
用しないメモリおよび動的に割当てられたメモリのよう
な情報を記憶するための手段であり、プログラムのソー
スコードにおいて要求が対応する動的に割り当てされた
メモリに対して行われる。メモリ管理機能がメモリ割当
てテーブルを保守する方法は、当業界では公知である。
【0015】UNIXは、他のオペレーティングシステ
ムのように、メモリのブロックを動的に割当てるために
使用できるメモリ管理機能のセットを提供する。UNI
Xのメモリ管理既往は、メモリのブロックを割当てし、
再割当てし、また割当て解除する各機能を含んでいる。
本発明のデバッキングメモリ管理機能のセットは、対応
するメモリ割当てが割当て解除されたことを示すとき
に、割当て解除情報(ファイル名およびライン番号に加
えて)をメモリ割当てテーブルにパスする動作をするた
めに、UNIXオペレーティングシステムのメモリ管理
機能を拡張する。本発明のメモリ割当てテーブル割当て
解除された情報を記憶するために動作する。
ムのように、メモリのブロックを動的に割当てるために
使用できるメモリ管理機能のセットを提供する。UNI
Xのメモリ管理既往は、メモリのブロックを割当てし、
再割当てし、また割当て解除する各機能を含んでいる。
本発明のデバッキングメモリ管理機能のセットは、対応
するメモリ割当てが割当て解除されたことを示すとき
に、割当て解除情報(ファイル名およびライン番号に加
えて)をメモリ割当てテーブルにパスする動作をするた
めに、UNIXオペレーティングシステムのメモリ管理
機能を拡張する。本発明のメモリ割当てテーブル割当て
解除された情報を記憶するために動作する。
【0016】割当て解除情報は満了イベントおよび従属
ポインタを含む。満了イベントは対応するメモリ割当て
が何時割当て解除されるかを示す出現(occurrence)で
ある。満了イベントに対応するメモリ割当てが、満了イ
ベントが出現したときに割り当て解除させない場合、メ
モリリークが存在している。従属ポインタはポインタ、
つまり、他のデータ要素の場所を、いずれかの先に動的
に割当てられたメモリに示すデータ要素である。従属ポ
インタにより参照されたメモリ割当ては、ここでは「親
メモリ割当て」と称する。従属ポインタの割当て解除情
報としての表示は、親メモリ割当ての割当て解除の前
に、対応するメモリ割当てが割当て解除されることを示
し、そうでない場合にはリークが存在している。
ポインタを含む。満了イベントは対応するメモリ割当て
が何時割当て解除されるかを示す出現(occurrence)で
ある。満了イベントに対応するメモリ割当てが、満了イ
ベントが出現したときに割り当て解除させない場合、メ
モリリークが存在している。従属ポインタはポインタ、
つまり、他のデータ要素の場所を、いずれかの先に動的
に割当てられたメモリに示すデータ要素である。従属ポ
インタにより参照されたメモリ割当ては、ここでは「親
メモリ割当て」と称する。従属ポインタの割当て解除情
報としての表示は、親メモリ割当ての割当て解除の前
に、対応するメモリ割当てが割当て解除されることを示
し、そうでない場合にはリークが存在している。
【0017】メモリ割当ては、限定されるものではない
が、以下の1つまたはそれより多くの分類を含んでい
る。常駐(permanent )、非常駐(transient)、持続
(prolonged )、および従属(dependent )。メモリ割
当ての各タイプおよび割当て解除情報の間の関係は以下
に説明する。常駐メモリ割当ては、決して割当て解除さ
れず、またメモリリークとは関連しないメモリ割当てで
ある。このタイプのメモリ割当ては決して出現しない満
了イベントと関連している。よって、常駐メモリ割当て
に関連したメモリリークはない。
が、以下の1つまたはそれより多くの分類を含んでい
る。常駐(permanent )、非常駐(transient)、持続
(prolonged )、および従属(dependent )。メモリ割
当ての各タイプおよび割当て解除情報の間の関係は以下
に説明する。常駐メモリ割当ては、決して割当て解除さ
れず、またメモリリークとは関連しないメモリ割当てで
ある。このタイプのメモリ割当ては決して出現しない満
了イベントと関連している。よって、常駐メモリ割当て
に関連したメモリリークはない。
【0018】非常駐メモリ割当ては、短期間に使用さ
れ、メモリ割当てを要求する機能または機能セットが完
了したときに割当て解除されるメモリ割当てである。持
続メモリ割当ては、拡張された時間の長さに対して使用
されるメモリ割当てである永続的なものではない。非常
駐メモリ割当てと同様に、持続メモリ割当ては、メモリ
割当てを要求する機能あるいは機能セットが完了したと
きに割当て解除される。非常駐メモリ割当ておよび持続
メモリ割当ては、コンピュータ装置あるいはプロセスの
動作状態に関連して出現する満了イベントと関連してい
る。例えば、満了イベントはユーザがキーボードにより
入力した出現、あるいはクライアントによるコンピュー
タシステムからの接続を絶つことである。
れ、メモリ割当てを要求する機能または機能セットが完
了したときに割当て解除されるメモリ割当てである。持
続メモリ割当ては、拡張された時間の長さに対して使用
されるメモリ割当てである永続的なものではない。非常
駐メモリ割当てと同様に、持続メモリ割当ては、メモリ
割当てを要求する機能あるいは機能セットが完了したと
きに割当て解除される。非常駐メモリ割当ておよび持続
メモリ割当ては、コンピュータ装置あるいはプロセスの
動作状態に関連して出現する満了イベントと関連してい
る。例えば、満了イベントはユーザがキーボードにより
入力した出現、あるいはクライアントによるコンピュー
タシステムからの接続を絶つことである。
【0019】本発明の好ましい実施の形態においては、
満了イベント情報はメモリ割当てテーブル内に固有の数
値として記憶される。各固有の数値は、メモリ割当てに
対応する特定の満了イベントを示している。固有の数値
を参照するために記号名が使用される。例えば、記号名
「EVENT_NEVER」には固有の数値「−1」が
割当てられる。この固有の数値は、対応するメモリ割当
てが決して発生しない満了イベントを有していることを
示すために、メモリ割当てテーブル内に記憶される。同
様に、記号名「EVENT_INPUT」には、対応す
るメモリ割当てがキーボードからの入力があったときに
割当て解除されることを示す固有の数値「7」が割当て
られる。
満了イベント情報はメモリ割当てテーブル内に固有の数
値として記憶される。各固有の数値は、メモリ割当てに
対応する特定の満了イベントを示している。固有の数値
を参照するために記号名が使用される。例えば、記号名
「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へのメモリ割当ての割当て解除の前に割当て
解除されなければならないことを意味する。
を使用した従属メモリ割当てを例示したものである。ユ
ーザがコンピュータシステムに接続したときには、メモ
リは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」は、
満了イベントが対応するメモリ割当てに関連していない
ことを示す固有の数値に対する記号名である。
報、つまり満了イベントおよび/または従属ポインタを
特定するために、本発明は、「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()機能のような、他のメモリ管理機能
と共に使用することもできる。
割当てるとともに満了イベントおよび/または従属ポイ
ンタを特定するために、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)に例示されている。
発明を実施するためのプログラムに対する擬似コードは
例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」
により参照されたメモリ割当てに関連していないことを
特定するために使用されている。
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)のように書き替えられる。
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の引数は破棄され
る。
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()機能も
同様に、特定の満了イベントの満了によって割当て解除
されるメモリ割当てに対応するファイル名とライン番号
のリストを戻す。
よび/または従属ポインタが特定された場合、メモリリ
ークは、「memory_trigger()」および
「free()」として参照される本発明のデバッギン
グメモリ管理機能を使用して検出される。memory
_trigger(満了イベント)機能は、特定の「満
了イベント」が発生した際に、メモリ割当てを割当て解
除するためのプログラムの失敗により生じるメモリリー
クを検出するためにプログラムにより使用される。特
に、プログラムはmemory_trigger()機
能を、特定のイベントが発生し、またメモリ管理機能
が、特定された「満了イベント」上で満了するようにセ
ットされたメモリ割当てに対してメモリ割当てテーブル
を参照するために使用する。本発明の1つの実施の形態
においては、memory_trigger()機能も
同様に、特定の満了イベントの満了によって割当て解除
されるメモリ割当てに対応するファイル名とライン番号
のリストを戻す。
【0029】本発明のmemory_trigge
r()はイベントにイベントが発生したときを示すため
に戦略的にプログラム内に挿入される。特に、memo
ry_trigger()機能はプログラム内に、満了
イベントが発生する位置に置かれる。図2に、メモリリ
ークを検出するためにmemory_trigger
(満了イベント)を使用する例を例示した。図2におい
て、ユーザ要求を待ち、要求に機能でサービスし、また
次のユーザ要求を待つ、ことを行うプログラムに対する
フローダイヤグラムが示されている。
r()はイベントにイベントが発生したときを示すため
に戦略的にプログラム内に挿入される。特に、memo
ry_trigger()機能はプログラム内に、満了
イベントが発生する位置に置かれる。図2に、メモリリ
ークを検出するためにmemory_trigger
(満了イベント)を使用する例を例示した。図2におい
て、ユーザ要求を待ち、要求に機能でサービスし、また
次のユーザ要求を待つ、ことを行うプログラムに対する
フローダイヤグラムが示されている。
【0030】ステップ2aにおいて、プログラムはユー
ザが要求するのを待っている。要求があると、ステップ
2bにおいて、malloc()機能が「servic
e()」(要求を処理するために)として参照された機
能に対するメモリを割当て、また割当てられたメモリの
アドレスに戻る。service()機能が要求を処理
することを完了するとともにプログラムを待ち状態に戻
したとき、service()機能に対するメモリ割当
ては割当て解除される。プログラムが待ち状態に戻るポ
イントが割当て解除のポイントである。プログラムがユ
ーザの要求を待っている状態は、EVENT_WAIT
INGとして記号として参照され、これは定義された数
値、例えば12を有している。
ザが要求するのを待っている。要求があると、ステップ
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に割り当てられ
た数値に等しい満了イベントを有するメモリ割当てに対
し、メモリ管理機能がメモリ割当てテーブルを参照す
る。上記した判定基準にマッチしたメモリ割当てに対応
するファイル名およびライン番号が戻される。
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()機能はまた、割当て解除されつつ
あるメモリ割当てに従属するメモリ割当てのリストに戻
される。
Xのfree()機能の変種である。UNIXのfre
e(ポインタ)機能と同様に、本発明のfee(ポイン
タ)機能はメモリ管理機能に、「ポインタ」により示さ
れた、先に動的に割当てられたメモリの領域を未使用の
メモリのプールに戻ることを指示する。さらに、「ポイ
ンタ」により参照されたメモリ割当てを割当て解除する
前に、本発明のfree()機能はメモリ管理機能に対
して、割当て解除される「ポインタ」により参照された
メモリ割当てに従属しているメモリ割当てがあるかどう
かを決定するために、メモリ割当てテーブルを参照する
ように指示する。見出だされたこのようなメモリ割当て
はメモリリークである。本発明の好ましい実施の形態に
おいて、free()機能はまた、割当て解除されつつ
あるメモリ割当てに従属するメモリ割当てのリストに戻
される。
【0033】例3(Example 3)は、図3に示
された場所のメモリリークを検出するために本発明のf
ree()機能を実行するための擬似コードを示したも
のである。
された場所のメモリリークを検出するために本発明の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、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】 メモリ管理機能を使用するコンピュータ
システム上で実行されるプログラム内におけるメモリリ
ークを検出するための方法であり、前記メモリ管理機能
は、対応する要求ファイル情報および割当て解除情報を
含む、前記コンピュータシステム内のコンピュータメモ
リの現在割当てられたブロックに関する情報を記憶する
ためのメモリ割当てテーブルを照会および保守するため
に動作するものにおいて、 前記コンピュータメモリのブロックを要求する前記プロ
グラム内の、前記プログラムの基本的なプログラミング
である機能のためにコンピュータメモリのブロックを割
当てるステップ、 割当てられたコンピュータメモリの前記ブロックのため
の、現在割当てられた前記コンピュータメモリのブロッ
クがいつ割当て解除されるかを示した前記割当て解除情
報を特定するステップ、 前記メモリ管理機能を使用して前記メモリ割当てテーブ
ル内の前記コンピュータメモリのブロックを要求する前
記機能に対応する前記要求ファイル情報および割当て解
除情報を記憶するステップ、 割当て解除イベントを有する現在割り当てられた前記コ
ンピュータメモリのブロックのために前記メモリ管理機
能を使用して前記メモリ割当てテーブルを照会すること
で、対応する割当て解除されるべき現在割り当てられた
前記コンピュータメモリのブロックを指示するステップ
からなることを特徴とするメモリリークの検出方法。 - 【請求項2】 コンピュータメモリのブロックを有する
コンピュータシステム上で実行される、少なくとも1つ
の機能からなるプログラム内のメモリリークを検出する
ための装置において、 前記コンピュータメモリのブロックを要求する前記機能
のためにコンピュータメモリのブロックを割当てするた
めの仮想メモリマネージャ、 要求ファイル情報および現在割り当てられたコンピュー
タメモリのブロックに対応する、現在割り当てられたコ
ンピュータメモリのブロックがいつ割当て解除されるの
かを示す割当て解除情報を記憶するために動作するメモ
リ割当てテーブル、 前記メモリ割当てテーブル内で割当てられた前記コンピ
ュータメモリのブロックのための割当て解除情報を特定
するための手段、 対応する現在割り当てられた前記コンピュータメモリの
ブロックが割当て解除されることを示す割当て解除イベ
ントを有する現在選択された前記コンピュータメモリの
ブロックに対して前記メモリ割当てテーブルを照会する
ためのデバッギングメモリ管理手段からなることを特徴
とするメモリリークの検出装置。
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)
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)
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)
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 |
-
1995
- 1995-12-04 US US08/566,768 patent/US5689707A/en not_active Expired - Fee Related
-
1996
- 1996-11-21 EP EP96308418A patent/EP0778525A1/en not_active Withdrawn
- 1996-12-02 JP JP8321298A patent/JPH09244948A/ja active Pending
Cited By (5)
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) | セグメントのロールイン/ロールアウト方式 |