JPH1021137A - メモリハント・フリー方式 - Google Patents

メモリハント・フリー方式

Info

Publication number
JPH1021137A
JPH1021137A JP8168815A JP16881596A JPH1021137A JP H1021137 A JPH1021137 A JP H1021137A JP 8168815 A JP8168815 A JP 8168815A JP 16881596 A JP16881596 A JP 16881596A JP H1021137 A JPH1021137 A JP H1021137A
Authority
JP
Japan
Prior art keywords
free
memory
hunt
routine
address
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
JP8168815A
Other languages
English (en)
Inventor
Shinichiro Nishida
慎一郎 西田
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.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry Co Ltd
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 Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP8168815A priority Critical patent/JPH1021137A/ja
Publication of JPH1021137A publication Critical patent/JPH1021137A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【課題】 フリーもれ、不正フリー、二重フリーに起因
する問題の発生が防止できるメモリハント・フリー方式
を提供し、プログラムの動作信頼性を高める。 【解決手段】 OS3の提供する汎用のメモリハント・
フリールーチン5を直接使用せずにアプリケーションプ
ログラム1内で動的にメモリをハント/フリーするメモ
リハント・フリー方式であって、ハント中のメモリのア
ドレスを記憶するアドレス・テーブル13を共通のデー
タとして有し、このアドレス・テーブル13上の記憶ア
ドレスに基づきハント中のメモリを一括してフリー可能
とする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プログラム内でメ
モリを動的にハント/フリーするメモリハント・フリー
方式に関するものである。
【0002】
【従来の技術】従来、アプリケーションプログラム(A
P)内で、動的に(APの処理中に)メモリをハント/
フリーする際は、オペレーティングシステム(OS)が
提供する汎用のメモリ・ハントフリールーチンを使用し
ていた。
【0003】
【発明が解決しようとする課題】しかしながら、従来の
メモリハント・フリー方式では、OS(例えばUNI
X)の提供するメモリ・ハントフリールーチンが、AP
側でメモリのハント/フリーを正常に行っているか否か
をチェックするための機構を有していなかったため、或
るAP内でハントしたメモリのフリーを行わないまま
(所謂、「フリーもれ」のまま)動作を続けてしまうこ
とがあり、結果的にシステムのメモリが不足し、他のA
Pの動作を妨げたり、システムダウンを発生させたりす
る問題(バグ)を作り込んでしまうケースが多発した。
また、或るAP内でハントしたメモリのフリーを行う際
に、フリーするメモリのアドレスを誤って指定したり
(所謂、「不正フリー」)、既にフリーしたアドレスを
指定して再度フリーを行う(所謂、「二重フリー」)等
のバグを作り込んでしまうケースも多発した。そして、
これらのフリーもれ、不正フリー、二重フリーは、いず
れの場合も、それらが行われた時点では動作上の異常と
して現れないため、問題の解析に多大な労力、時間を必
要とした。本発明は上記状況に鑑みてなされたもので、
フリーもれ、不正フリー、二重フリーに起因する問題の
発生が防止できるとともに、それらの発生する履歴が収
集できるメモリハント・フリー方式を提供し、プログラ
ムの動作信頼性向上、問題解析の容易化を図ることを目
的とする。
【0004】
【課題を解決するための手段】上記目的を達成するため
の本発明に係るメモリハント・フリー方式は、OSの提
供する汎用のメモリハント・フリールーチンを直接使用
せずにアプリケーションプログラム内で動的にメモリを
ハント/フリーするメモリハント・フリー方式であっ
て、ハント中のメモリのアドレスを記憶するアドレス・
テーブルを共通のデータとして有し、該アドレス・テー
ブル上の記憶アドレスに基づきハント中のメモリを一括
してフリー可能とすることを特徴とするものである。
【0005】このように構成されたメモリハント・フリ
ー方式では、あるアプリケーション内で、メモリのフリ
ーもれがあっても、ハント中のメモリのアドレスを記憶
したアドレス・テーブルに基づき、ハント中のメモリを
一括してフリーすることにより、フリーもれとなってい
たメモリがフリーされることになる。また、通常のハン
ト/フリーでは、メモリをハント/フリーするのに一対
のハント/フリーが必要となるが、ハント中のメモリを
一括してフリー可能とすることで、ハント/フリーを一
対で行わなくてもよくなり、プログラミングロッジクの
重複手続きを省略することができる。
【0006】
【発明の実施の形態】以下、本発明に係るメモリハント
・フリー方式の好適な実施の形態を図面を参照して詳細
に説明する。図1は本発明の第一実施形態のプログラム
・ブロック図である。本実施形態によるメモリハント・
フリー方式を実現する機能手段は、アプリケーションプ
ログラム(AP)1と、オペレーティングシステム(O
S)3が提供するハント/フリールーチン5と、chk
hntルーチン7と、chkfreeルーチン9と、a
llfreeルーチン11と、アドレス・テーブル13
とを具備している。
【0007】AP1は、chkhntルーチン7、ch
kfreeルーチン9、allfreeルーチン11を
ルーチンコールの呼び先としている。chkhntルー
チン7、chkfreeルーチン9、allfreeル
ーチン11は、OS3のハント/フリールーチン5をル
ーチンコールの呼び先としている。
【0008】なお、chkhntルーチン7、chkf
reeルーチン9、allfreeルーチン11、アド
レス・テーブル13は、実質的にAP1のライブラリに
格納されるものであり、特定のOS(本例では、UNI
X)上で作られたプログラムであれば、任意のプログラ
ムとリンクして動作可能なものである。
【0009】この機能手段でメモリのハントフリーを行
う際は、OS3の提供するハント/フリールーチン5を
直接使用せず、chkhntルーチン7、chkfre
eルーチン9、allfreeルーチン11を用途に応
じて使用する。アドレス・テーブル13は、chkhn
tルーチン7でハントしたメモリのアドレスを記憶する
テーブルであり、chkhntルーチン7で書込み、c
hkfreeルーチン9及びallfreeルーチン1
1で読込み、書込みを行う。
【0010】この機能手段を実行することによるメモリ
ハント・フリー方式の動作を説明する。AP1がメモリ
のハントを行う時、chkhntルーチン7がコールさ
れる。chkhntルーチン7は、chkhntルーチ
ン7内でOS3のハントルーチン5を用いて、AP1の
要求したメモリのハントを行う。その際、chkhnt
ルーチン7は、アドレス・テーブル13の空きエリアに
ハントしたメモリのアドレスを書込む。
【0011】一方、AP1が特定のメモリのフリーを行
う時、chkfreeルーチン9がコールされる。ch
kfreeルーチン9は、chkfreeルーチン9内
でOS3のフリールーチン5を用いて、AP1の要求し
たメモリのフリーを行う。その際、chkfreeルー
チン9は、アドレス・テーブル13を検索し、その時フ
リー要求のあったメモリのアドレスをアドレス・テーブ
ル13上から削除する(具体的には、アドレス・テーブ
ル13上の該当エリアに初期値を書込み、空とする)。
【0012】また、AP1がその時点で保持しているc
hkhntルーチン7によってハントした全てのメモリ
を一括してフリーする時、allfreeルーチン11
がコールされる。allfreeルーチン11は、アド
レス・テーブル13を参照し、アドレス・テーブル13
上に格納されているアドレスで示される全てのメモリの
フリーを行う。従って、全てのメモリのフリーが終了し
た時点で、アドレス・テーブル13は初期化された状態
となる。
【0013】このメモリハント・フリー方式によれば、
あるAP1内で、メモリのフリーもれがあっても、al
lfreeルーチン11を適宜コールすることにより、
フリーもれとなっていたメモリをフリーすることができ
る。この結果、フリーもれに起因する問題、例えば、メ
モリの不足による他のAPの動作障害、或いはシステム
ダウン等の発生を防止することができる。
【0014】また、通常のハント/フリーでは、メモリ
をハント/フリーするのに一対のハント/フリーが必要
となるが、このメモリハント・フリー方式では、複数の
ハントをchkfreeルーチン9によって行った後、
例えば1トランザクション(1つの要求に対する仕事)
終了時点で、allfreeルーチン11をコールする
ことにより一括してフリーを行うことができる。この結
果、1つのメモリ領域に対してハント/フリーを一対で
行わなくてもよくなり、プログラミングロッジクの重複
手続きを省略でき、プログラミングを簡素にできるとと
もに、メモリの不正フリー、二重フリー等のバグ発生を
抑止することができる。
【0015】次に、本発明による第二の実施形態を説明
する。図2は本発明の第二実施形態のプログラム・ブロ
ック図である。この実施形態によるメモリハント・フリ
ー方式を実現する機能手段は、上述の第一実施形態と同
様のAP1と、OS3が提供するハント/フリールーチ
ン5と、chkhntルーチン7と、chkfreeル
ーチン9と、allfreeルーチン11と、アドレス
・テーブル13とに加え、ログファイル21と、チェッ
カープログラム(チェッカー)23と、チェック結果フ
ァイル25とを有している。
【0016】ログファイル21は、chkhntルーチ
ン7、chkfreeルーチン9、allfreeルー
チン11から書き込みが可能となっており、メモリハン
ト、フリーの履歴が記録できるようになっている。ま
た、チェッカー23は、オペレータからOS3のMMI
部(マンマシンインターフェース部)27を介して起動
され、ログファイル21を参照してチェック結果ファイ
ル25への書込みを行う。
【0017】次に、この実施形態によるメモリハント・
フリー方式の動作を図3〜図7に基づき説明する。図3
はchkhnt、chkfree、allfreeの呼
出し形式を示す説明図、図4はchkhntルーチンの
動作フローチャート(A)、図5はchkfreeルー
チンの動作フローチャート(B)、図6はallfre
eルーチンの動作フローチャート(C)、図7はチェッ
カープログラムの動作フローチャート(D)である。
【0018】chkhntルーチン7、chkfree
ルーチン9、allfreeルーチン11の呼出し形式
は、入力パラメータと出力パラメータがそれぞれ図3に
示したものとなる。即ち、chkhntルーチン7は、
入力パラメータが「ハントしたいメモリエリアのサイ
ズ」、「自プログラムのソースファイル名」、「chk
hntをコールするステップ(自ステップ)のソースフ
ァイル上のライン行数」、出力パラメータが「ハントで
きたメモリエリアの先頭アドレス」となる。
【0019】chkfreeルーチン9は、入力パラメ
ータが「フリーしたいメモリエリアの先頭アドレス」、
「自プログラムのソースファイル名」、「chkfre
eをコールするステップ(自ステップ)のソースファイ
ル上のライン行数」となり、出力パラメータがない。
【0020】allfreeルーチン11は、入力パラ
メータが「自プログラムのソースファイル名」、「al
lfreeをコールするステップ(自ステップ)のソー
スファイル上のライン行数」となり、出力パラメータが
ない。
【0021】なお、自ステップは、自ソースファイル名
の先頭から何行目かを指定するものである。
【0022】次に、chkhntルーチン7の動作を図
4に基づき説明する。AP1がchkhntルーチン7
をコールし、メモリのハントを行う時、chkhntル
ーチン7内でAP1から要求されたサイズ(aバイトと
する)に、固定のサイズ(bバイトとする)を加えてた
サイズ(a+bバイト)のメモリを、OS3のハント/
フリールーチン5を用いてハントする(A1、A3)。
次に、ハントルーチン5によってハントできたメモリの
先頭アドレスをアドレス・テーブル13の空きエリアに
書き込む(A5)。
【0023】次に、ハントしたメモリエリアの先頭から
bバイト分、固定の値を書込む(A7)。AP1に通知
するハントできたメモリの先頭アドレスは、実際にハン
トルーチン5によってハントしたメモリの先頭アドレス
+bバイト分のアドレスとする(A9)。
【0024】次に、現在、テストモードで動作中か否か
の判断を行い(A11)、テストモードであれば、メモ
リハントの履歴、即ち、AP1から通知された要求メモ
リエリアサイズ、プログラムソースファイル名、ファイ
ル中の呼出し箇所のライン行、AP1に通知するハント
したメモリの先頭アドレス等をログファイル21に書き
込む(A13)。また、テストモードでなければ、ログ
ファイル21への書込みを行わず処理を終了する。
【0025】なお、現在テストモードであるか否かは、
例えば予め定められた名前のファイルがシステム内に存
在するか否かで表されるものとする(即ち、ファイルが
存在すればテストモード、存在しなければ非テストモー
ドとなる)。また、モードの判定については、OS3の
状態で、プログラム(プロセス)起動時のパラメータを
環境変数として定義できる場合、それを使用するなどの
例も考えられる。
【0026】次に、chkfreeルーチン9の動作を
図5に基づき説明する。AP1がchkfreeルーチ
ン9をコールし、メモリのフリーを行う時、(AP1か
ら指定されたアドレス)−(bバイト)のアドレスがア
ドレス・テーブル13上にあるか否かをチェックする
(B1)。
【0027】このアドレスがアドレス・テーブル13上
にある場合には、AP1から指定されたメモリの先頭ア
ドレスから前bバイトに固定の値(chkhntで書き
込んだ値)が書かれているかをチェックする(B3)。
この結果、アドレスが一致し、不正なアドレスでない場
合には、AP1から指定された(メモリの先頭アドレ
ス)−(bバイト)を実際のメモリの先頭アドレスと
し、freeルーチンでメモリをフリーし、chkfr
eeルーチン9の実行結果を正常とする(B5)。
【0028】次に、アドレス・テーブル13上の、処理
B5でフリーしたアドレスが書かれているエリアを初期
化し、空とする(B7)。なお、処理B1、B3の判定
の結果、異常であった場合は、chkfreeルーチン
9の実行結果を異常とし(B9)、当該メモリのフリー
は行わない。これは上述の二重フリー、不正フリーによ
る問題の発生を未然に防ぐためである。
【0029】次に、テストモードか否かのチェックを行
い(B11)、テストモードである場合には、ログファ
イル21上にAP1から通知されたプログラムソースフ
ァイル名、ファイル中の呼出し箇所のライン行、フリー
するメモリの先頭アドレス、chkfreeの実行結果
をログファイル21に書込み(B13)、処理を終了す
る。また、テストモードでない場合には、ログファイル
21への書込みを行わず処理を終了する。
【0030】次に、allfreeルーチン11の動作
を図6に基づき説明する。allfreeルーチン11
では、アドレス・テーブル13の全レコードが初期値で
あるかを判断し(C1)、初期値である場合には処理を
終了する。一方、初期値でない場合には、アドレス・テ
ーブル13からアドレスを一つ取出し(C3)、取り出
したアドレスからbバイト差し引いたアドレスと、AP
1からのパラメータであるソースファイル名、呼出し箇
所のライン行を入力パラメータとし、chkfreeル
ーチン9をコールし(C5)、この処理をアドレス・テ
ーブル13上の全レコードが初期値となるまで行う。
【0031】次に、チェッカー23の動作を図7に基づ
き説明する。チェッカー23の処理は、先ず、ログデー
タをログファイル21からメモリ上に読込み(D1)、
メモリ上に読み込んだログデータ内の全てのハント履歴
に対して処理済みか否かを判断する(D3)。
【0032】処理済みでない場合には、ログデータ内の
ハント履歴を1つ取出し(D5)、ハント履歴中のアド
レスを使用してフリーしたフリー履歴がログファイル2
1中にあるかを検索する(D7)。フリー履歴がログフ
ァイル21中にある場合には、ログデータ内の当該ハン
ト履歴、フリー履歴を消去し(D9)、処理D3に戻
る。一方、フリー履歴がログファイル21中にない場合
には、当該ハント履歴をチェック結果ファイル25に書
き込んだ(D11)後、処理D3に戻る。
【0033】また、処理D3において、ログデータ内の
全てのハント履歴に対して処理済みである場合には、ロ
グデータ内の全てのフリー履歴について処理済みかを判
断する(D13)。そして、全てのフリー履歴が処理さ
れていない場合には、ログデータ内のフリー履歴を1つ
取り出し(D15)、当該フリー履歴をチェック結果フ
ァイル25に書込み(D17)、処理D13に戻る。
【0034】一方、全てのフリー履歴が処理されている
場合には、チェッカー23の処理を終了する。
【0035】これにより、ログファイル21をチェッカ
ー23にかけることで、ログファイル21からフリーも
れ、二重フリー、不正フリーの履歴のみを抜き出すこと
ができる。即ち、処理D11でチェック結果ファイル2
5に書き込まれたものがフリーもれとなったメモリのハ
ント時の履歴、処理D17でチェック結果ファイル25
に書き込まれたものが二重フリー、又は不正フリーの履
歴となる。
【0036】このように、上述した第二の実施形態によ
るメモリハント・フリー方式によれば、メモリのハン
ト、フリーの履歴が収集でき、フリーもれ等の問題が発
生した時点で、履歴からAP1でのどの処理でハントし
たメモリが(何のデータを保持しておくためにハントし
たメモリが)フリーもれとなっているかが特定でき、問
題の解析、修正を容易にすることができる。
【0037】そして、各ルーチンでの履歴の収集を行う
か否かを各AP実行時に判定するため、本ルーチンをリ
ンクしたAPは、実動作環境へもインストール可能であ
る。つまり、テスト用、実環境用として2本の同一AP
を持つ必要がなくなる。
【0038】また、chkfreeルーチン9内で二重
フリー、不正フリーのチェックを行い、それらの疑いが
ある場合は、実際のメモリフリーを行わないので、二重
フリー、不正フリーに起因する問題の発生を未然に防止
することができる。
【0039】更に、チェッカー23により、フリーも
れ、二重フリー、不正フリーがチェック結果ファイル2
5に書き込めるので、メモリハント・フリーの履歴解析
の時間を大幅に短縮することができる。
【0040】なお、第一、第二の実施形態によるメモリ
ハント・フリー方式は、UNIX上のネットワーク管理
システム用APに適用した場合を例に説明したが、本発
明によるメモリハント・フリー方式は、その他汎用コン
ピュータ等(例えばEWS;エンジニアリング・ワーク
ステーション)におけるアプリケーションプログラム内
でのメモリハント・フリー処理にも勿論利用可能なもの
である。
【0041】
【発明の効果】以上詳細に説明したように、本発明に係
るメモリハント・フリー方式によれば、ハント中のメモ
リのアドレスを記憶するアドレス・テーブルを共通のデ
ータとして有し、アドレス・テーブル上の記憶アドレス
に基づきハント中のメモリを一括してフリー可能とした
ので、フリーもれとなっていたメモリをフリーすること
ができ、フリーもれに起因する問題、例えば、メモリの
不足による他のアプリケーションプログラムの動作障
害、或いはシステムダウン等の発生を防止することがで
きる。また、ハント/フリーを一対で行わなくてもよく
なるため、プログラミングロッジクの重複手続きを省略
でき、プログラミングを簡素にできるとともに、メモリ
の不正フリー、二重フリー等のバグ発生を抑止すること
ができる。
【図面の簡単な説明】
【図1】本発明の第一実施形態のプログラム・ブロック
図である。
【図2】本発明の第二実施形態のプログラム・ブロック
図である。
【図3】chkhnt、chkfree、allfre
eの呼出し形式を示す説明図である。
【図4】chkhntルーチンの動作フローチャート
(A)である。
【図5】chkfreeルーチンの動作フローチャート
(B)である。
【図6】allfreeルーチンの動作フローチャート
(C)である。
【図7】チェッカープログラムの動作フローチャート
(D)である。
【符号の説明】
1 アプリケーションプログラム(AP) 3 オペレーティングシステム(OS) 5 汎用のメモリハント・フリールーチン 13 アドレス・テーブル 21 ログファイル 23 チェッカープログラム 25 チェック結果ファイル

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 OSの提供する汎用のメモリハント・フ
    リールーチンを直接使用せずにアプリケーションプログ
    ラム内で動的にメモリをハント/フリーするメモリハン
    ト・フリー方式であって、 ハント中のメモリのアドレスを記憶するアドレス・テー
    ブルを共通のデータとして有し、該アドレス・テーブル
    上の記憶アドレスに基づきハント中のメモリを一括して
    フリー可能とすることを特徴とするメモリハント・フリ
    ー方式。
  2. 【請求項2】 メモリをハント/フリーした履歴の収集
    を可能とし、該履歴の収集を行うか否かをアプリケーシ
    ョンプログラムの実行時に判定することで、該アプリケ
    ーションプログラムの履歴収集用(テスト用)実行ファ
    イルと実環境用実行ファイルとを一つの実行ファイルと
    して実行することを特徴とするメモリハント・フリー方
    式。
  3. 【請求項3】 メモリのフリー時、アプリケーションプ
    ログラムから指定されたアドレスがアドレス・テーブル
    上にあるか否かを判断し、前記指定されたアドレスがア
    ドレス・テーブル上にない場合には前記フリーを二重フ
    リー若しくは不正フリーであると判定して前記メモリの
    フリーを行わないことを特徴とするメモリハント・フリ
    ー方式。
  4. 【請求項4】 メモリのハント/フリー履歴を記憶する
    ログファイルと、該ログファイルを参照し且つ参照結果
    をチェック結果ファイルに書込むチェッカープログラム
    とを具備し、前記ログファイルに記憶されたメモリのハ
    ント/フリーの履歴から二重フリー、不正フリー、フリ
    ーもれに該当する履歴のみを前記チェック結果ファイル
    に書き込むことを特徴とするメモリハント・フリー方
    式。
JP8168815A 1996-06-28 1996-06-28 メモリハント・フリー方式 Pending JPH1021137A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8168815A JPH1021137A (ja) 1996-06-28 1996-06-28 メモリハント・フリー方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8168815A JPH1021137A (ja) 1996-06-28 1996-06-28 メモリハント・フリー方式

Publications (1)

Publication Number Publication Date
JPH1021137A true JPH1021137A (ja) 1998-01-23

Family

ID=15875020

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8168815A Pending JPH1021137A (ja) 1996-06-28 1996-06-28 メモリハント・フリー方式

Country Status (1)

Country Link
JP (1) JPH1021137A (ja)

Similar Documents

Publication Publication Date Title
US9274923B2 (en) System and method for stack crawl testing and caching
EP0586767A1 (en) Selective data capture for software exception conditions
US7552425B2 (en) Implementing enhanced compiled breakpoint analysis
US6698016B1 (en) Method for injecting code into another process
EP0853278A2 (en) Fast traps for computer software instrumentation
US5819024A (en) Fault analysis system
CN114490394A (zh) 测试范围确定方法、装置、设备和介质
US6785883B1 (en) Software system for tracing data
CN116450398A (zh) 异常回溯方法、装置、设备和介质
JP2005338987A (ja) 例外テスト支援プログラム及び例外テスト支援装置
JPH1021137A (ja) メモリハント・フリー方式
JP4125055B2 (ja) ログ取得方法
JPH0731617B2 (ja) プログラム暴走検知方法
US6581156B1 (en) Method for recording a data state in a data processing system
CN117742897B (zh) 一种基于容器镜像漏洞自动修复的实现方法
CN114048488B (zh) 漏洞检测方法及系统
CN116860639B (zh) 内存泄漏的检测方法、检测装置、计算机设备及存储介质
JP2545856B2 (ja) メモリダンプ採取装置
JP3202708B2 (ja) ソフトウェアのエラー処理テストシステム、テスト方法及びテストプログラムの記録媒体
KR20240003169A (ko) Db를 활용한 난독화된 악성 스크립트 탐지 장치 및 방법
JP3309792B2 (ja) スタックポインタトレース装置、スタックポインタトレース方法及び記録媒体
CN118331714A (zh) 一种软件冻结和恢复的方法及系统
JPH07210423A (ja) 計算機システム
JP2001265619A (ja) データトレース方式
JP3106989B2 (ja) シミュレーションデバッガのシミュレーション方式