JPH09330232A - 動的記憶域割り付け方式 - Google Patents
動的記憶域割り付け方式Info
- Publication number
- JPH09330232A JPH09330232A JP8168634A JP16863496A JPH09330232A JP H09330232 A JPH09330232 A JP H09330232A JP 8168634 A JP8168634 A JP 8168634A JP 16863496 A JP16863496 A JP 16863496A JP H09330232 A JPH09330232 A JP H09330232A
- Authority
- JP
- Japan
- Prior art keywords
- storage area
- live range
- dynamic storage
- information
- program
- 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
- 238000000034 method Methods 0.000 title claims description 17
- 238000012545 processing Methods 0.000 claims description 24
- 230000006870 function Effects 0.000 claims description 15
- 238000001514 detection method Methods 0.000 abstract description 10
- 238000010586 diagram Methods 0.000 description 19
- 238000007796 conventional method Methods 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
- Memory System (AREA)
Abstract
(57)【要約】
【課題】動的な記憶域の確保・解放の為の記憶域管理ラ
イブラリの呼出しを削減させることによりライブラリ呼
出し及び動的記憶域管理機構によるオーバヘッドを減少
させる。 【解決手段】確保する記憶域のサイズがプログラム翻訳
時に判明する動的な記憶域の確保要求を検出し確保要求
に対し返却された記憶域を識別するポインタ値に関する
データフローとプログラムの制御フローを解析し確保さ
れた記憶域の生存区間を検出する生存区間検出手段と検
出された複数の動的記憶域の生存区間の重複を検査する
生存区間重複検査手段と生存区間重複検査手段により判
明した生存区間の重複状況を考慮して同一の記憶域を共
有可能な一つ以上の動的記憶域をグループ化する手段と
同一グループに属する動的記憶域の確保・解放の要求を
無効としグループの先頭で確保された記憶域を共有して
利用するようプログラムを変更する手段を備える。
イブラリの呼出しを削減させることによりライブラリ呼
出し及び動的記憶域管理機構によるオーバヘッドを減少
させる。 【解決手段】確保する記憶域のサイズがプログラム翻訳
時に判明する動的な記憶域の確保要求を検出し確保要求
に対し返却された記憶域を識別するポインタ値に関する
データフローとプログラムの制御フローを解析し確保さ
れた記憶域の生存区間を検出する生存区間検出手段と検
出された複数の動的記憶域の生存区間の重複を検査する
生存区間重複検査手段と生存区間重複検査手段により判
明した生存区間の重複状況を考慮して同一の記憶域を共
有可能な一つ以上の動的記憶域をグループ化する手段と
同一グループに属する動的記憶域の確保・解放の要求を
無効としグループの先頭で確保された記憶域を共有して
利用するようプログラムを変更する手段を備える。
Description
【0001】
【発明の属する技術分野】本発明は、情報処理装置の言
語処理系に関し、特に言語処理系の動的記憶域割り付け
方式に関する。
語処理系に関し、特に言語処理系の動的記憶域割り付け
方式に関する。
【0002】
【従来の技術】この種の従来技術として、例えば特開昭
63−226750号公報には、動的な記憶域の割り付
けに際して、指定したメモリ容量の割当てが受けられな
い時に、割当て可能な最大のメモリ容量を2分探索法を
用いて求め、再割当てを受けて、大容量のメモリを確保
することによって処理の迅速化を図るようにした動的メ
モリ確保方式が提案されている。
63−226750号公報には、動的な記憶域の割り付
けに際して、指定したメモリ容量の割当てが受けられな
い時に、割当て可能な最大のメモリ容量を2分探索法を
用いて求め、再割当てを受けて、大容量のメモリを確保
することによって処理の迅速化を図るようにした動的メ
モリ確保方式が提案されている。
【0003】そして、上記公報以外の従来技術において
も、動的記憶域の割り付けの処理効率を改善する方式と
して、プログラムからの記憶域割り付け要求に対する処
理方式を改善するアプローチのみにとどまっているとい
うのが実状である。
も、動的記憶域の割り付けの処理効率を改善する方式と
して、プログラムからの記憶域割り付け要求に対する処
理方式を改善するアプローチのみにとどまっているとい
うのが実状である。
【0004】
【発明が解決しようとする課題】すなわち、従来の動的
記憶域の割り付け方式においては、記憶域の確保・解放
の処理方式の改善により、動的記憶域の割り付けの高速
化を図っているが、動的記憶域を多用するプログラムに
おいては、十分な処理の高速化が実現されない場合が少
なくない。この理由を以下に説明する。
記憶域の割り付け方式においては、記憶域の確保・解放
の処理方式の改善により、動的記憶域の割り付けの高速
化を図っているが、動的記憶域を多用するプログラムに
おいては、十分な処理の高速化が実現されない場合が少
なくない。この理由を以下に説明する。
【0005】プログラムから動的な記憶域の割り付け機
能を有するプログラミング言語においては、利用者プロ
グラム(ユーザプログラム)中に記述された動的な記憶
域の確保・解放の指定の記述を、言語処理系が提供する
記憶域管理用のライブラリ関数呼出しに置き換えて実現
している。
能を有するプログラミング言語においては、利用者プロ
グラム(ユーザプログラム)中に記述された動的な記憶
域の確保・解放の指定の記述を、言語処理系が提供する
記憶域管理用のライブラリ関数呼出しに置き換えて実現
している。
【0006】また、当該の記憶域管理用のライブラリ関
数においては、ランダムな記憶域の確保・解放要求に対
応するため、および記憶域の有効活用のために、一般に
複雑な記憶域管理機構を採用している。
数においては、ランダムな記憶域の確保・解放要求に対
応するため、および記憶域の有効活用のために、一般に
複雑な記憶域管理機構を採用している。
【0007】従来技術においては、このライブラリ関数
内で実行される複雑な記憶域管理機構の改善することに
より、記憶域の確保・解放の高速化を図ろうとしたもの
であるが、プログラム中に記述された動的記憶域の確保
・解放の要求毎にライブラリ関数の呼出しは依然として
行われるため、ライブラリ関数呼出しによるオーバヘッ
ドの改善には至っていない。
内で実行される複雑な記憶域管理機構の改善することに
より、記憶域の確保・解放の高速化を図ろうとしたもの
であるが、プログラム中に記述された動的記憶域の確保
・解放の要求毎にライブラリ関数の呼出しは依然として
行われるため、ライブラリ関数呼出しによるオーバヘッ
ドの改善には至っていない。
【0008】特に動的記憶域が多用されるプログラムで
は、ライブラリ関数の呼出しが多数発生し、従来技術に
よる高速化のみでは十分な効果が得られない場合が少な
くない。
は、ライブラリ関数の呼出しが多数発生し、従来技術に
よる高速化のみでは十分な効果が得られない場合が少な
くない。
【0009】従って、本発明は、上記事情に鑑みてなさ
れたものであって、その目的は、動的な記憶域の確保・
解放のための記憶域管理ライブラリの呼び出しを削減す
ることによってライブラリ呼び出し及び動的記憶管理機
構によるオーバヘッドを低減し、高速化を達成するよう
にした動的記憶割付方式を提供することにある。
れたものであって、その目的は、動的な記憶域の確保・
解放のための記憶域管理ライブラリの呼び出しを削減す
ることによってライブラリ呼び出し及び動的記憶管理機
構によるオーバヘッドを低減し、高速化を達成するよう
にした動的記憶割付方式を提供することにある。
【0010】
【課題を解決するための手段】前記目的を達成するた
め、本発明の動的記憶域割り付け方式は、ソース・プロ
グラムを解析し該プログラム中で発行される動的な記憶
域の確保・解放要求に関するデータフロー情報、及び該
プログラムの制御フロー情報に基づき、複数の動的な記
憶域間での生存区間の重複状況を検出し、共有可能な複
数の記憶域を検出して共有させることにより、動的な記
憶域の確保・解放のための記憶域管理用のライブラリ呼
出しを削減するように前記ソース・プログラムを自動修
正する手段を備えたことを特徴とする。
め、本発明の動的記憶域割り付け方式は、ソース・プロ
グラムを解析し該プログラム中で発行される動的な記憶
域の確保・解放要求に関するデータフロー情報、及び該
プログラムの制御フロー情報に基づき、複数の動的な記
憶域間での生存区間の重複状況を検出し、共有可能な複
数の記憶域を検出して共有させることにより、動的な記
憶域の確保・解放のための記憶域管理用のライブラリ呼
出しを削減するように前記ソース・プログラムを自動修
正する手段を備えたことを特徴とする。
【0011】本発明は、利用者がプログラム中に任意に
記述した動的な記憶域の確保・解放の要求を静的に解析
可能な範囲で、異なる動的な記憶域に対して、共有可能
な複数の記憶域を検出して共有させることにより、動的
な記憶域の確保・解放のための記憶域管理用のライブラ
リ呼出しを削減し、記憶域管理用ライブラリによるオー
バヘッドを減少させるようにしたものである。
記述した動的な記憶域の確保・解放の要求を静的に解析
可能な範囲で、異なる動的な記憶域に対して、共有可能
な複数の記憶域を検出して共有させることにより、動的
な記憶域の確保・解放のための記憶域管理用のライブラ
リ呼出しを削減し、記憶域管理用ライブラリによるオー
バヘッドを減少させるようにしたものである。
【0012】すなわち、本発明に係る動的記憶域割付方
式は、プログラムの実行中に動的に記憶域を確保・解放
する機能を有するプログラミング言語に対する言語処理
系において、確保する記憶域のサイズがプログラムの翻
訳時に判明する動的な記憶域の確保要求を検出し、当該
の確保要求に対して返却された記憶域を識別するポイン
タ値に関するデータフローとプログラムの制御フローを
解析して当該のポインタ値が識別する記憶域に対する確
保要求から最も離れた位置の解放要求を検出することに
よって確保された記憶域の生存区間を検出する生存区間
検出手段と、生存区間検出手段によって検出された複数
の動的記憶域の生存区間の重複を検査する生存区間重複
検査手段と、生存区間重複検査手段によって判明した生
存区間の重複状況を考慮して同一の記憶域を共有可能な
一つ以上の動的記憶域をグループ化するグループ化手段
と、一つのグループ中の動的記憶域の内で最も大きいサ
イズの記憶域を当該のグループ中でその生存区間が最も
早く開始される動的記憶域の生存区間の先頭で確保し当
該のグループ中でその生存区間が最も遅く終了する動的
記憶域の生存区間の最後で解放し同一グループに属する
動的記憶域の確保・解放の要求を無効としてグループの
先頭で確保された記憶域を共有して利用するようにプロ
グラムを変更するプログラム変更手段を有することを特
徴とする。
式は、プログラムの実行中に動的に記憶域を確保・解放
する機能を有するプログラミング言語に対する言語処理
系において、確保する記憶域のサイズがプログラムの翻
訳時に判明する動的な記憶域の確保要求を検出し、当該
の確保要求に対して返却された記憶域を識別するポイン
タ値に関するデータフローとプログラムの制御フローを
解析して当該のポインタ値が識別する記憶域に対する確
保要求から最も離れた位置の解放要求を検出することに
よって確保された記憶域の生存区間を検出する生存区間
検出手段と、生存区間検出手段によって検出された複数
の動的記憶域の生存区間の重複を検査する生存区間重複
検査手段と、生存区間重複検査手段によって判明した生
存区間の重複状況を考慮して同一の記憶域を共有可能な
一つ以上の動的記憶域をグループ化するグループ化手段
と、一つのグループ中の動的記憶域の内で最も大きいサ
イズの記憶域を当該のグループ中でその生存区間が最も
早く開始される動的記憶域の生存区間の先頭で確保し当
該のグループ中でその生存区間が最も遅く終了する動的
記憶域の生存区間の最後で解放し同一グループに属する
動的記憶域の確保・解放の要求を無効としてグループの
先頭で確保された記憶域を共有して利用するようにプロ
グラムを変更するプログラム変更手段を有することを特
徴とする。
【0013】
【発明の実施の形態】本発明の実施形態について図面を
参照して以下に詳細に説明する。図1は、本発明の実施
の形態の構成をブロック図にて示したものである。
参照して以下に詳細に説明する。図1は、本発明の実施
の形態の構成をブロック図にて示したものである。
【0014】図1を参照すると、本発明の実施の形態
は、言語処理系1、生存区間検出手段2、生存区間重複
検出手段3、グループ化手段4、プログラム変更手段
5、ソースプログラム6、データフロー情報7、制御フ
ロー情報8、生存区間情報9、生存区間重複状況情報1
0、及びグループ情報11を備えて構成される。以下各
要素を説明する。
は、言語処理系1、生存区間検出手段2、生存区間重複
検出手段3、グループ化手段4、プログラム変更手段
5、ソースプログラム6、データフロー情報7、制御フ
ロー情報8、生存区間情報9、生存区間重複状況情報1
0、及びグループ情報11を備えて構成される。以下各
要素を説明する。
【0015】図2は、本発明の実施の形態におけるデー
タフロー情報7の構成の一例を示す図である。
タフロー情報7の構成の一例を示す図である。
【0016】図2を参照すると、データフロー情報7
は、データフローテーブルならびにアリアステーブルに
よって構成される。データフローテーブルは、各エント
リが、データ、データに値が設定される位置、当該の値
を保持している範囲が終了する位置、及びアリアステー
ブルへのチェイン(ポインタ)と、を備えて構成され
る、データフロー情報の集合である。また、アリアステ
ーブルは、データフローテーブルの各エントリに対応し
て作成され、対応するデータフローテーブルのエントリ
に格納されているデータフロー情報によって識別される
データが保持する値の写しを保持するアリアステーブル
の設定位置、終了位置によって構成されるアリアス情報
の集合である。
は、データフローテーブルならびにアリアステーブルに
よって構成される。データフローテーブルは、各エント
リが、データ、データに値が設定される位置、当該の値
を保持している範囲が終了する位置、及びアリアステー
ブルへのチェイン(ポインタ)と、を備えて構成され
る、データフロー情報の集合である。また、アリアステ
ーブルは、データフローテーブルの各エントリに対応し
て作成され、対応するデータフローテーブルのエントリ
に格納されているデータフロー情報によって識別される
データが保持する値の写しを保持するアリアステーブル
の設定位置、終了位置によって構成されるアリアス情報
の集合である。
【0017】上記したデータフロー情報7は、言語処理
系1によって事前に作成されているものとする。
系1によって事前に作成されているものとする。
【0018】図3は、本発明の実施の形態における、制
御フロー情報8の構成の一例を示す図である。図3を参
照すると、制御フロー情報8は、基本ブロックに関する
情報を保持する1又は複数の基本ブロック情報によって
構成され、各基本ブロックは基本ブロック間の制御フロ
ーに従ってチェインによって結ばれている。
御フロー情報8の構成の一例を示す図である。図3を参
照すると、制御フロー情報8は、基本ブロックに関する
情報を保持する1又は複数の基本ブロック情報によって
構成され、各基本ブロックは基本ブロック間の制御フロ
ーに従ってチェインによって結ばれている。
【0019】基本ブロック情報は、基本ブロックの開始
位置、終了位置、当該の基本ブロックから制御が移行す
る1つ以上の他の基本ブロックに対する基本ブロック情
報へのチェインによって構成される。制御フロー情報8
は、言語処理系1によって事前に作成されているものと
する。
位置、終了位置、当該の基本ブロックから制御が移行す
る1つ以上の他の基本ブロックに対する基本ブロック情
報へのチェインによって構成される。制御フロー情報8
は、言語処理系1によって事前に作成されているものと
する。
【0020】図4は、本発明の実施の形態における生存
区間情報9の構成の一例を示す図である。図4を参照す
ると、生存区間情報9は、生存区間テーブルと、解放情
報テーブルと、から構成される。生存区間テーブルは、
ソースプログラム6中で確保される動的な記憶域に関す
る情報の集合であり、各エントリ(#1〜#n)は、動
的な記憶域が生存する区間の区間開始情報、区間終了情
報、動的な記憶域を識別するポインタ値を保持するデー
タ、動的な記憶域のサイズ、当該の動的な記憶域に対応
する解放情報テーブルへのチェインと、を備えて構成さ
れる。そして、図示のように、区間開始情報は、区間の
開始位置と開始位置が含まれる基本ブロック番号を保持
し、区間終了情報は、区間の終了位置と終了位置が含ま
れる基本ブロック番号を保持する。また、解放情報テー
ブル1〜nは、対応する動的な記憶域の解放情報の集合
であり、解放情報は、動的な記憶域の解放位置と解放位
置が含まれる基本ブロック番号を保持する。
区間情報9の構成の一例を示す図である。図4を参照す
ると、生存区間情報9は、生存区間テーブルと、解放情
報テーブルと、から構成される。生存区間テーブルは、
ソースプログラム6中で確保される動的な記憶域に関す
る情報の集合であり、各エントリ(#1〜#n)は、動
的な記憶域が生存する区間の区間開始情報、区間終了情
報、動的な記憶域を識別するポインタ値を保持するデー
タ、動的な記憶域のサイズ、当該の動的な記憶域に対応
する解放情報テーブルへのチェインと、を備えて構成さ
れる。そして、図示のように、区間開始情報は、区間の
開始位置と開始位置が含まれる基本ブロック番号を保持
し、区間終了情報は、区間の終了位置と終了位置が含ま
れる基本ブロック番号を保持する。また、解放情報テー
ブル1〜nは、対応する動的な記憶域の解放情報の集合
であり、解放情報は、動的な記憶域の解放位置と解放位
置が含まれる基本ブロック番号を保持する。
【0021】図5は、本発明の実施の形態における、生
存区間重複状況情報10の構成の一例を示す図である。
図5を参照すると、生存区間重複状況情報10は、動的
な記憶域と他の動的な記憶域との生存区間の重複情報を
表す2次元のビット配列からなり、各次元の要素数は共
に生存区間情報9の生存区間テーブルのエントリ数と同
一とされる(行及び列方向に#1〜#n)。生存区間重
複状況情報10の各ビットは、該当する動的な記憶域同
士の生存区間が重複する場合には「1」が設定され、そ
れ以外の場合は「0」が設定される。
存区間重複状況情報10の構成の一例を示す図である。
図5を参照すると、生存区間重複状況情報10は、動的
な記憶域と他の動的な記憶域との生存区間の重複情報を
表す2次元のビット配列からなり、各次元の要素数は共
に生存区間情報9の生存区間テーブルのエントリ数と同
一とされる(行及び列方向に#1〜#n)。生存区間重
複状況情報10の各ビットは、該当する動的な記憶域同
士の生存区間が重複する場合には「1」が設定され、そ
れ以外の場合は「0」が設定される。
【0022】図6は、本発明の実施の形態におけるグル
ープ情報11の構成の一例を示す図である。図6を参照
すると、グループ情報11は、グループ化された動的な
記憶域に対するグループ開始位置、グループ終了位置、
生成データ、サイズによって構成されるエントリの集合
である。
ープ情報11の構成の一例を示す図である。図6を参照
すると、グループ情報11は、グループ化された動的な
記憶域に対するグループ開始位置、グループ終了位置、
生成データ、サイズによって構成されるエントリの集合
である。
【0023】次に、本発明の実施形態の動作について図
1を参照して説明する。
1を参照して説明する。
【0024】言語処理系1は、ソースプログラム6を入
力して、データフロー情報7、制御フロー情報8を生成
する。
力して、データフロー情報7、制御フロー情報8を生成
する。
【0025】次に、言語処理系1は、生存区間検出手段
2、生存区間重複検出手段3、グループ化手段4、プロ
グラム変更手段5を順次起動して、ソースプログラム6
中の動的な記憶域の確保・解放のための記憶域管理用ラ
イブラリ関数の呼出しが削減されるようにソースプログ
ラム6を変更する。
2、生存区間重複検出手段3、グループ化手段4、プロ
グラム変更手段5を順次起動して、ソースプログラム6
中の動的な記憶域の確保・解放のための記憶域管理用ラ
イブラリ関数の呼出しが削減されるようにソースプログ
ラム6を変更する。
【0026】生存区間検出手段2は、ソースプログラム
6、データフロー情報7、制御フロー情報8を入力し
て、ソースプログラム6中の確保する記憶域のサイズが
静的に判明する動的な記憶域の確保要求によって確保さ
れる動的な記憶域が、確保された位置から最も離れた位
置で解放されるまでの区間(生存区間)を下記の手順で
検出する。
6、データフロー情報7、制御フロー情報8を入力し
て、ソースプログラム6中の確保する記憶域のサイズが
静的に判明する動的な記憶域の確保要求によって確保さ
れる動的な記憶域が、確保された位置から最も離れた位
置で解放されるまでの区間(生存区間)を下記の手順で
検出する。
【0027】(1)ソースプログラム6を調査し、確保
する記憶域のサイズが静的に判明する動的な記憶域の確
保要求の位置、サイズ、および、その確保要求によって
確保された動的な記憶域を識別するポインタ値を保持す
るデータを検出し、生存区間情報9の生存区間テーブル
の区間開始情報の位置フィールド、生存区間テーブルの
サイズフィールド、生存区間テーブルのデータフィール
ドに格納する。
する記憶域のサイズが静的に判明する動的な記憶域の確
保要求の位置、サイズ、および、その確保要求によって
確保された動的な記憶域を識別するポインタ値を保持す
るデータを検出し、生存区間情報9の生存区間テーブル
の区間開始情報の位置フィールド、生存区間テーブルの
サイズフィールド、生存区間テーブルのデータフィール
ドに格納する。
【0028】この処理によって、生存区間情報9には、
ソースプログラム6中の確保する記憶域のサイズが静的
に判明する全ての動的な記憶域に対する確保要求の位
置、サイズ、ならびに確保された動的な記憶域を識別す
るポインタ値を保持するデータに関する情報が格納され
る。
ソースプログラム6中の確保する記憶域のサイズが静的
に判明する全ての動的な記憶域に対する確保要求の位
置、サイズ、ならびに確保された動的な記憶域を識別す
るポインタ値を保持するデータに関する情報が格納され
る。
【0029】(2)次に、ソースプログラム6を調査
し、各動的な記憶域を識別するポインタ値を保持するデ
ータおよびそのアリアスデータが、当該動的な記憶域を
識別するポインタ値を保持している範囲内の、当該動的
な記憶域の解放要求の位置を全て検出して、生存区間情
報9中に、当該動的な記憶域に対応する解放情報テーブ
ル(図4参照)を作成し、その各エントリの解放情報の
位置フィールドに検出した解放要求の位置を格納する。
し、各動的な記憶域を識別するポインタ値を保持するデ
ータおよびそのアリアスデータが、当該動的な記憶域を
識別するポインタ値を保持している範囲内の、当該動的
な記憶域の解放要求の位置を全て検出して、生存区間情
報9中に、当該動的な記憶域に対応する解放情報テーブ
ル(図4参照)を作成し、その各エントリの解放情報の
位置フィールドに検出した解放要求の位置を格納する。
【0030】この処理において、各動的な記憶域を識別
するポインタ値を保持するデータと、そのアリアスデー
タがその値を保持している範囲を取得するために生存区
間情報9の生存区間テーブルの各エントリのデータフィ
ールドに対応するデータフロー情報7のデータフローテ
ーブルのデータフロー情報の設定位置フィールド・終了
位置フィールド、および対応するアリアステーブルの各
アリアス情報の設定位置フィールド・終了位置フィール
ドが参照される。
するポインタ値を保持するデータと、そのアリアスデー
タがその値を保持している範囲を取得するために生存区
間情報9の生存区間テーブルの各エントリのデータフィ
ールドに対応するデータフロー情報7のデータフローテ
ーブルのデータフロー情報の設定位置フィールド・終了
位置フィールド、および対応するアリアステーブルの各
アリアス情報の設定位置フィールド・終了位置フィール
ドが参照される。
【0031】(3)続いて、制御フロー情報8の各基本
ブロック情報の開始位置フィールド・終了位置フィール
ドを参照して、生存区間情報9の生存区間テーブルの区
間開始情報の位置フィールド、解放情報テーブルの解放
情報の位置フィールドに格納されている位置に対応する
基本ブロック番号を決定し、生存区間情報9の生存区間
テーブルにおける、区間開始情報のブロックフィール
ド、解放情報テーブルの解放情報のブロックフィールド
に、基本ブロック番号を設定する。
ブロック情報の開始位置フィールド・終了位置フィール
ドを参照して、生存区間情報9の生存区間テーブルの区
間開始情報の位置フィールド、解放情報テーブルの解放
情報の位置フィールドに格納されている位置に対応する
基本ブロック番号を決定し、生存区間情報9の生存区間
テーブルにおける、区間開始情報のブロックフィール
ド、解放情報テーブルの解放情報のブロックフィールド
に、基本ブロック番号を設定する。
【0032】(4)最後に、生存区間情報9の解放情報
テーブル、制御フロー情報8を参照して、各々の動的な
記憶域に対するいかなる解放要求経由で処理が移行して
も、必ず通過する確保要求から最も離れた基本ブロック
を決定する。この基本ブロックの先頭の位置と基本ブロ
ック番号を、生存区間情報9の生存区間テーブルの区間
終了情報の位置フィールド・ブロックフィールドに格納
する。解放要求が1つの場合には、その解放の位置が生
存区間の終わりとなる。
テーブル、制御フロー情報8を参照して、各々の動的な
記憶域に対するいかなる解放要求経由で処理が移行して
も、必ず通過する確保要求から最も離れた基本ブロック
を決定する。この基本ブロックの先頭の位置と基本ブロ
ック番号を、生存区間情報9の生存区間テーブルの区間
終了情報の位置フィールド・ブロックフィールドに格納
する。解放要求が1つの場合には、その解放の位置が生
存区間の終わりとなる。
【0033】いかなる解放要求経由で処理が移行して
も、必ず通過する基本ブロックが存在しない場合には、
当該動的な記憶域は、この処理の対象外とし、既に生存
区間情報9に格納された情報を削除する。
も、必ず通過する基本ブロックが存在しない場合には、
当該動的な記憶域は、この処理の対象外とし、既に生存
区間情報9に格納された情報を削除する。
【0034】生存区間重複検出手段3は、生存区間検出
手段2によって生成された、生存区間情報9中の各動的
な記憶域に対する、区間開始情報及び区間終了情報、を
参照して、各動的な記憶域と、生存区間が重複する動的
な記憶域を検出し、生存区間重複状況情報10(図5参
照)を設定する。
手段2によって生成された、生存区間情報9中の各動的
な記憶域に対する、区間開始情報及び区間終了情報、を
参照して、各動的な記憶域と、生存区間が重複する動的
な記憶域を検出し、生存区間重複状況情報10(図5参
照)を設定する。
【0035】グループ化手段4は、生存区間重複検出手
段3によって作成された生存区間重複状況情報10を参
照して、生存区間が重複しない動的な記憶域群をグルー
プ化して、グループ情報11(図6参照)を生成する。
段3によって作成された生存区間重複状況情報10を参
照して、生存区間が重複しない動的な記憶域群をグルー
プ化して、グループ情報11(図6参照)を生成する。
【0036】グループ情報11のグループ開始位置は、
生存区間情報9の生存区間テーブル中の、グループ化さ
れた動的な記憶域群の内の最も早く出現するものに対応
するエントリの区間開始情報の位置フィールドの値が設
定される。また、グループ情報11のグループ終了位置
は、生存区間情報9の生存区間テーブル中の、グループ
化された動的な記憶域群の内の最も最後に出現するもの
に対応するエントリの区間終了情報の位置フィールドの
値が設定される。グループ情報11のサイズは、生存区
間情報9の生存区間テーブル中の、グループ化された動
的な記憶域群の内の最もサイズが大きいものに対応する
エントリのサイズフィールドの値が設定される。
生存区間情報9の生存区間テーブル中の、グループ化さ
れた動的な記憶域群の内の最も早く出現するものに対応
するエントリの区間開始情報の位置フィールドの値が設
定される。また、グループ情報11のグループ終了位置
は、生存区間情報9の生存区間テーブル中の、グループ
化された動的な記憶域群の内の最も最後に出現するもの
に対応するエントリの区間終了情報の位置フィールドの
値が設定される。グループ情報11のサイズは、生存区
間情報9の生存区間テーブル中の、グループ化された動
的な記憶域群の内の最もサイズが大きいものに対応する
エントリのサイズフィールドの値が設定される。
【0037】プログラム変更手段5は、グループ化手段
4によって作成されたグループ情報11の各エントリを
参照してソースプログラム6を下記の手順で変更する。
4によって作成されたグループ情報11の各エントリを
参照してソースプログラム6を下記の手順で変更する。
【0038】(1)グループ情報11のグループ開始位
置に、グループ情報11のサイズフィールドの値による
動的な記憶域の確保要求を追加する。
置に、グループ情報11のサイズフィールドの値による
動的な記憶域の確保要求を追加する。
【0039】(2)当該動的な記憶域の確保要求によっ
て確保された動的な記憶域を識別するポインタ値を保持
するためのポインタデータを生成し、当該生成データに
確保された動的な記憶域を識別するポインタ値が格納さ
れるようにする。また、生成データ名をグループ情報1
1の生成データフィールド(図6参照)に設定する。
て確保された動的な記憶域を識別するポインタ値を保持
するためのポインタデータを生成し、当該生成データに
確保された動的な記憶域を識別するポインタ値が格納さ
れるようにする。また、生成データ名をグループ情報1
1の生成データフィールド(図6参照)に設定する。
【0040】(3)当該グループに属する全ての動的な
記憶域に対する確保要求を、当該の確要求によって確保
された動的な記憶域を識別するポインタ値を保持するポ
インタデータに、上記した生成データが保持する値を代
入する処理に変更する。
記憶域に対する確保要求を、当該の確要求によって確保
された動的な記憶域を識別するポインタ値を保持するポ
インタデータに、上記した生成データが保持する値を代
入する処理に変更する。
【0041】(4)当該グループに属する全ての動的な
記憶域に対する全ての解放要求を削除する。
記憶域に対する全ての解放要求を削除する。
【0042】(5)グループ情報11のグループ終了位
置に、当該動的な記憶域の解放要求を追加する。解放さ
れる動的な記憶域を識別するポインタ値は、グループ情
報11の生成データフィールドに設定されている生成デ
ータに保持されている。
置に、当該動的な記憶域の解放要求を追加する。解放さ
れる動的な記憶域を識別するポインタ値は、グループ情
報11の生成データフィールドに設定されている生成デ
ータに保持されている。
【0043】以上により、本発明の実施の形態による動
的記憶域の割り付け方式の処理が完了し、ソースプログ
ラム6中の動的な記憶域の確保・解放のための記憶域管
理用ライブラリ関数の呼出しが削減されたソースプログ
ラム6が生成される。
的記憶域の割り付け方式の処理が完了し、ソースプログ
ラム6中の動的な記憶域の確保・解放のための記憶域管
理用ライブラリ関数の呼出しが削減されたソースプログ
ラム6が生成される。
【0044】
【実施例】次に、上記した本発明の実施の形態をより具
体的に説明すべく、本発明の実施例について図面を参照
して詳細に説明する。本発明の実施例の構成は、前記実
施の形態と同様な構成とされ、図1を参照とすると、言
語処理系1、生存区間検出手段2、生存区間重複検出手
段3、グループ化手段4、プログラム変更手段5、ソー
スプログラム6、データフロー情報7、制御フロー情報
8、生存区間情報9、生存区間重複状況情報10、グル
ープ情報11から構成される。
体的に説明すべく、本発明の実施例について図面を参照
して詳細に説明する。本発明の実施例の構成は、前記実
施の形態と同様な構成とされ、図1を参照とすると、言
語処理系1、生存区間検出手段2、生存区間重複検出手
段3、グループ化手段4、プログラム変更手段5、ソー
スプログラム6、データフロー情報7、制御フロー情報
8、生存区間情報9、生存区間重複状況情報10、グル
ープ情報11から構成される。
【0045】図7は、本実施例におけるソースプログラ
ム6の一例を示す図である。図7に示すように、ソース
プログラム6はPL/I言語によって記述されている。
ソースプログラム中の各行の位置はソースプログラムの
左側に示してある。また、PL/I言語における動的な
記憶域の確保要求は、「ALLOCATE文」、解放要
求は「FREE文」によって記述される。これら「AL
LOCATE文」、「FREE文」による動的な記憶域
の確保・解放は、言語処理系によって生成された目的プ
ログラムにおいては、動的な記憶域の確保・解放のため
の記憶域管理ライブラリ関数によって実現されている
(リンク手段によってリンクされ実行モジュールが生成
される)。ちなみに、図7に示すソースプログラム6に
おいて、位置11では「ALLOCATE文」によりサ
イズ128(次元128の文字型配列)の記憶域の確保
要求#1が発行され(P1はポインタ型の変数)、位置
36で「FREE文」により確保要求#1の解放要求が
なされている。
ム6の一例を示す図である。図7に示すように、ソース
プログラム6はPL/I言語によって記述されている。
ソースプログラム中の各行の位置はソースプログラムの
左側に示してある。また、PL/I言語における動的な
記憶域の確保要求は、「ALLOCATE文」、解放要
求は「FREE文」によって記述される。これら「AL
LOCATE文」、「FREE文」による動的な記憶域
の確保・解放は、言語処理系によって生成された目的プ
ログラムにおいては、動的な記憶域の確保・解放のため
の記憶域管理ライブラリ関数によって実現されている
(リンク手段によってリンクされ実行モジュールが生成
される)。ちなみに、図7に示すソースプログラム6に
おいて、位置11では「ALLOCATE文」によりサ
イズ128(次元128の文字型配列)の記憶域の確保
要求#1が発行され(P1はポインタ型の変数)、位置
36で「FREE文」により確保要求#1の解放要求が
なされている。
【0046】図8は、本実施例におけるデータフロー情
報7の一具体例(図7に示すプログラムの記憶域確保・
解放に対応)を示す図である。図8を参照して、各フィ
ールドの意味は、前記実施の形態で参照した図2と同一
とされている。例えばデータフロー情報の第1エントリ
の各フィールドの、P1、11、36はそれぞれデー
タ、設定位置、終了位置を示している。
報7の一具体例(図7に示すプログラムの記憶域確保・
解放に対応)を示す図である。図8を参照して、各フィ
ールドの意味は、前記実施の形態で参照した図2と同一
とされている。例えばデータフロー情報の第1エントリ
の各フィールドの、P1、11、36はそれぞれデー
タ、設定位置、終了位置を示している。
【0047】図9は、本実施例における制御フロー情報
8の一具体例を示す図である。各フィールドの意味は前
記実施の形態で参照した図3と同様とされており、その
説明は省略する。
8の一具体例を示す図である。各フィールドの意味は前
記実施の形態で参照した図3と同様とされており、その
説明は省略する。
【0048】図10は、本実施例における生存区間情報
9の一具体例を示す図である。各フィールドの意味は前
記実施の形態で参照した図4と同様とされており、その
説明は省略する。
9の一具体例を示す図である。各フィールドの意味は前
記実施の形態で参照した図4と同様とされており、その
説明は省略する。
【0049】図11は、本実施例における生存区間重複
状況情報10の具体例である。各ボットフラグの意味は
前記実施の形態で参照した図2と同様とされている。例
えば動的記憶域#1は動的記憶域#2、#3と生存区間
が重複している。
状況情報10の具体例である。各ボットフラグの意味は
前記実施の形態で参照した図2と同様とされている。例
えば動的記憶域#1は動的記憶域#2、#3と生存区間
が重複している。
【0050】図12は、本実施例におけるグループ情報
11の具体例である。各フィールドの意味は前記実施の
形態で参照した図6と同様とされており、その説明は省
略する。
11の具体例である。各フィールドの意味は前記実施の
形態で参照した図6と同様とされており、その説明は省
略する。
【0051】図13は、本実施例における動的記憶域割
り付け方式によって変更されたソースプログラム6の具
体例である。ソースプログラム中の各行の位置はソース
プログラムの左側に示してある。
り付け方式によって変更されたソースプログラム6の具
体例である。ソースプログラム中の各行の位置はソース
プログラムの左側に示してある。
【0052】図7に示した元ソースプログラムに対して
追加又は変更された行の位置は、n−mの形式で、図7
の同じ行と区別して示してある。図7のソースプログラ
ムにおいて、図13に存在しない行は、削除された行で
ある。
追加又は変更された行の位置は、n−mの形式で、図7
の同じ行と区別して示してある。図7のソースプログラ
ムにおいて、図13に存在しない行は、削除された行で
ある。
【0053】言語処理系1は、ソースプログラム6(図
7参照)を解析して、データフロー情報7(図8参
照)、制御フロー情報8(図9参照)を生成する。
7参照)を解析して、データフロー情報7(図8参
照)、制御フロー情報8(図9参照)を生成する。
【0054】本実施例のデータフロー情報7は、データ
P1、P2、P3、P4、P5に関して、ソースプログ
ラム6(図7参照)上の動的な記憶域を識別するポイン
タ値が設定された位置、ポインタ値が解放要求によって
無効となることによって、当該データに保持されている
値の寿命が終了する位置が、データフローテーブルに設
定される(図8参照)。
P1、P2、P3、P4、P5に関して、ソースプログ
ラム6(図7参照)上の動的な記憶域を識別するポイン
タ値が設定された位置、ポインタ値が解放要求によって
無効となることによって、当該データに保持されている
値の寿命が終了する位置が、データフローテーブルに設
定される(図8参照)。
【0055】更に、データフローテーブルの各エントリ
に対応するデータが保持する値の写しを保持するアリア
スデータに関して、ソースプログラム6(図7参照)上
の当該の値が設定された位置、ポインタ値が解放要求に
よって無効となることによって当該データに保持されて
いる値の寿命が終了する位置がアリアステーブルに設定
される。
に対応するデータが保持する値の写しを保持するアリア
スデータに関して、ソースプログラム6(図7参照)上
の当該の値が設定された位置、ポインタ値が解放要求に
よって無効となることによって当該データに保持されて
いる値の寿命が終了する位置がアリアステーブルに設定
される。
【0056】本実施例では、アリアステーブルは、図7
の位置45においてデータP3が保持するポインタ値を
代入されているデータP6(P6=P3)に関するもの
のみである。
の位置45においてデータP3が保持するポインタ値を
代入されているデータP6(P6=P3)に関するもの
のみである。
【0057】本実施例の制御フロー情報8は、図9を参
照すると、基本ブロック情報#1、#2、#3、#4、
#5、#6、#7、#8、#9によって構成され、各基
本ブロック情報は、ソースプログラム6上の開始位置、
終了位置、当該制御ブロックから制御が移行される他の
基本ブロックへのチェインを保持している。
照すると、基本ブロック情報#1、#2、#3、#4、
#5、#6、#7、#8、#9によって構成され、各基
本ブロック情報は、ソースプログラム6上の開始位置、
終了位置、当該制御ブロックから制御が移行される他の
基本ブロックへのチェインを保持している。
【0058】言語処理系1は、続いて、生存区間検出手
段2、生存区間重複検出手段3、グループ手段4、プロ
グラム変更手段5を順次起動して、ソースプログラム6
(図7参照)中の動的な記憶域の確保・解放のための記
憶域管理用ライブラリ関数の呼出しが削減されるように
変更されたソースプログラム6(図13参照)を生成す
る。
段2、生存区間重複検出手段3、グループ手段4、プロ
グラム変更手段5を順次起動して、ソースプログラム6
(図7参照)中の動的な記憶域の確保・解放のための記
憶域管理用ライブラリ関数の呼出しが削減されるように
変更されたソースプログラム6(図13参照)を生成す
る。
【0059】生存区間検出手段2は、ソースプログラム
6(図7参照)を調査して、「ALLOCATE文」の
出現位置(11、15、19、25、37)と、各「A
LLOCATE文」で確保された動的な記憶域のサイズ
(128、256、300、256、100)、確保さ
れた動的な記憶域を識別するポインタ値を保持するデー
タ(P1、P2、P4、P5、P3)を生存区間情報9
(図10参照)の生存区間テーブルの区間開始情報の位
置フィールド、サイズフィールド、データフィールドに
設定する。
6(図7参照)を調査して、「ALLOCATE文」の
出現位置(11、15、19、25、37)と、各「A
LLOCATE文」で確保された動的な記憶域のサイズ
(128、256、300、256、100)、確保さ
れた動的な記憶域を識別するポインタ値を保持するデー
タ(P1、P2、P4、P5、P3)を生存区間情報9
(図10参照)の生存区間テーブルの区間開始情報の位
置フィールド、サイズフィールド、データフィールドに
設定する。
【0060】次に、生存区間情報9(図10参照)の生
存区間テーブルのエントリ#1、#2、#3、#4、#
5のそれぞれに対して、ソースプログラム6(図7参
照)を調査して、各エントリに対応する動的な記憶域に
対する「FREE文」の出現位置(36、18、22、
28、34、41、48)を検出し、生存区間情報9
(図10参照)の生存区間テーブルの対応するエントリ
配下の解放情報テーブルの解放情報の位置フィールドに
設定する。
存区間テーブルのエントリ#1、#2、#3、#4、#
5のそれぞれに対して、ソースプログラム6(図7参
照)を調査して、各エントリに対応する動的な記憶域に
対する「FREE文」の出現位置(36、18、22、
28、34、41、48)を検出し、生存区間情報9
(図10参照)の生存区間テーブルの対応するエントリ
配下の解放情報テーブルの解放情報の位置フィールドに
設定する。
【0061】「FREE文」の検出に際しては、データ
フロー情報7(図8参照)を参照して、データP1、P
2、P4、P5、P3、及びP3の転写データP6に該
当する動的な記憶域を識別するポインタ値が保持されて
いる範囲を調査する。
フロー情報7(図8参照)を参照して、データP1、P
2、P4、P5、P3、及びP3の転写データP6に該
当する動的な記憶域を識別するポインタ値が保持されて
いる範囲を調査する。
【0062】続いて、制御フロー情報8(図9参照)を
参照して、生存区間情報9(図10参照)中の生存区間
テーブルの区間開始情報の位置フィールドに設定されて
いる位置(11、15、19、25、37)が属する基
本ブロック番号(#1、#2、#2、#3、#6)を決
定し、同じ区間開始情報のブロックフィールドに設定す
る。また、生存区間情報9(図10参照)中の解放情報
テーブルの解放情報の位置フィールドに設定されている
位置(36、18、22、28、34、41、48)が
属する基本ブロック番号(#6、#2、#2、#4、#
5、#7、#8)を同じ解放情報のブロックフィールド
に設定する。
参照して、生存区間情報9(図10参照)中の生存区間
テーブルの区間開始情報の位置フィールドに設定されて
いる位置(11、15、19、25、37)が属する基
本ブロック番号(#1、#2、#2、#3、#6)を決
定し、同じ区間開始情報のブロックフィールドに設定す
る。また、生存区間情報9(図10参照)中の解放情報
テーブルの解放情報の位置フィールドに設定されている
位置(36、18、22、28、34、41、48)が
属する基本ブロック番号(#6、#2、#2、#4、#
5、#7、#8)を同じ解放情報のブロックフィールド
に設定する。
【0063】基本ブロック番号の決定は、制御フロー情
報8(図9参照)中の各基本ブロック情報の開始位置フ
ィールドと終了位置フィールドに保持されている値の間
に属するか否かで行われる。
報8(図9参照)中の各基本ブロック情報の開始位置フ
ィールドと終了位置フィールドに保持されている値の間
に属するか否かで行われる。
【0064】最後に、各動的な記憶域の生存区間の区間
終了位置と属する基本ブロックを決定するために、生存
区間情報9(図10参照)中の生存区間テーブルの各エ
ントリに対応する解放情報テーブルのいかなる解放要求
を経由しても、必ず通過する基本ブロックを、制御フロ
ー情報8(図9参照)を参照して決定する。
終了位置と属する基本ブロックを決定するために、生存
区間情報9(図10参照)中の生存区間テーブルの各エ
ントリに対応する解放情報テーブルのいかなる解放要求
を経由しても、必ず通過する基本ブロックを、制御フロ
ー情報8(図9参照)を参照して決定する。
【0065】本実施例では、生存区間情報9(図10参
照)の生存区間テーブルのエントリ#1、#2、#3に
各々に対応する解放要求は、それぞれ1つであるため、
これらの生存区間の区間終了情報は、対応する解放情報
テーブルの解放情報の位置フィールド、ブロックフィー
ルドと同じとなる。
照)の生存区間テーブルのエントリ#1、#2、#3に
各々に対応する解放要求は、それぞれ1つであるため、
これらの生存区間の区間終了情報は、対応する解放情報
テーブルの解放情報の位置フィールド、ブロックフィー
ルドと同じとなる。
【0066】図10を参照して、エントリ#4に対応す
る解放要求は、位置28(基本ブロック#4)、位置3
4(基本ブロック#5)の2つ存在するが、位置28が
属する基本ブロック#4(開始位置27、終了位置3
0)は、当該基本ブロックを通過した後に他の基本ブロ
ックへ制御が移行しないため、位置28、34のいずれ
を経由しても、必ず通過する基本ブロックは存在しない
ため、エントリ#4を対象外とするために、生存区間テ
ーブルから、エントリ#4を削除する。また、エントリ
#4に対応する解放情報テーブル4も削除する。
る解放要求は、位置28(基本ブロック#4)、位置3
4(基本ブロック#5)の2つ存在するが、位置28が
属する基本ブロック#4(開始位置27、終了位置3
0)は、当該基本ブロックを通過した後に他の基本ブロ
ックへ制御が移行しないため、位置28、34のいずれ
を経由しても、必ず通過する基本ブロックは存在しない
ため、エントリ#4を対象外とするために、生存区間テ
ーブルから、エントリ#4を削除する。また、エントリ
#4に対応する解放情報テーブル4も削除する。
【0067】エントリ#5に対応する解放要求は、位置
41、48の2つ存在し、いずれを経由しても必ず通過
する基本ブロックは基本ブロック#9であるので、その
生存区間の終了位置情報のブロックフィールドには#
9、位置フィールドには基本ブロックの先頭位置50が
設定される。
41、48の2つ存在し、いずれを経由しても必ず通過
する基本ブロックは基本ブロック#9であるので、その
生存区間の終了位置情報のブロックフィールドには#
9、位置フィールドには基本ブロックの先頭位置50が
設定される。
【0068】生存区間重複検査手段3は、生存区間情報
9(図10参照)の生存区間テーブルの各エントリを参
照して、各エントリに対応する動的な記憶域の生存区間
の重複状況を調査して生存区間重複状況情報10(図1
1参照)を生成する。図7に示したソースプログラムに
おいては、エントリ#1に対応する動的な記憶域の生存
区間とエントリ#2、#3に対応する動的な記憶域の生
存区間が重複することとなる。
9(図10参照)の生存区間テーブルの各エントリを参
照して、各エントリに対応する動的な記憶域の生存区間
の重複状況を調査して生存区間重複状況情報10(図1
1参照)を生成する。図7に示したソースプログラムに
おいては、エントリ#1に対応する動的な記憶域の生存
区間とエントリ#2、#3に対応する動的な記憶域の生
存区間が重複することとなる。
【0069】グループ化手段4は、生存区間重複状況情
報10(図11参照)を参照して、生存区間が重複しな
い動的な記憶域群をグループ化し、グループ情報11
(図12参照)を生成する。
報10(図11参照)を参照して、生存区間が重複しな
い動的な記憶域群をグループ化し、グループ情報11
(図12参照)を生成する。
【0070】生存区間情報9(図10参照)の生存区間
テーブルのエントリ#1とエントリ#5、エントリ#2
とエントリ#3の2つのグループにグループ化するか、
エントリ#2、エントリ#3、エントリ#5を1つのグ
ループにグループ化することが可能であるが、本実施例
では、それぞれの動的な記憶域のサイズの相違を考慮し
て、前者の2つのグループにグループ化する。
テーブルのエントリ#1とエントリ#5、エントリ#2
とエントリ#3の2つのグループにグループ化するか、
エントリ#2、エントリ#3、エントリ#5を1つのグ
ループにグループ化することが可能であるが、本実施例
では、それぞれの動的な記憶域のサイズの相違を考慮し
て、前者の2つのグループにグループ化する。
【0071】その結果、図12に示すように、グループ
情報11には、グループ#1(開始位置:11、終了位
置:50、サイズ:128)とグループ#2(開始位
置:15、終了位置:22、サイズ:300)の2つの
情報が生成される。
情報11には、グループ#1(開始位置:11、終了位
置:50、サイズ:128)とグループ#2(開始位
置:15、終了位置:22、サイズ:300)の2つの
情報が生成される。
【0072】プログラム変更手段5は、グループ化情報
11(図12参照)を参照し、図7に示したソースプロ
グラム6中の動的な記憶域の確保・解放要求をグループ
の開始位置、終了位置のみで行うように変更し、図13
に示すようなソースプログラムを生成する。
11(図12参照)を参照し、図7に示したソースプロ
グラム6中の動的な記憶域の確保・解放要求をグループ
の開始位置、終了位置のみで行うように変更し、図13
に示すようなソースプログラムを生成する。
【0073】グループ#1には生存区間情報9(図10
参照)の生存区間テーブルのエントリ#1とエントリ#
5に対応する動的な記憶域が属するので、エントリ#1
に対応する動的な記憶域に対する「ALLOCATE
文」が出現する元ソースプログラム6の位置11は、変
更後のソースプログラムにおいては、図13に示すよう
に、位置11−1、11−2、11−3のように変更さ
れる。追加された11−1の「DCL #P1# PT
R」でポインタを定義し、11−2で「ALLOCAT
E A SET(#P1#)」とポインタをもとの位置
11から変更し、追加された11−3で「P1=#P1
#」と確保された記憶域のポインタ値をP1に代入して
いる。
参照)の生存区間テーブルのエントリ#1とエントリ#
5に対応する動的な記憶域が属するので、エントリ#1
に対応する動的な記憶域に対する「ALLOCATE
文」が出現する元ソースプログラム6の位置11は、変
更後のソースプログラムにおいては、図13に示すよう
に、位置11−1、11−2、11−3のように変更さ
れる。追加された11−1の「DCL #P1# PT
R」でポインタを定義し、11−2で「ALLOCAT
E A SET(#P1#)」とポインタをもとの位置
11から変更し、追加された11−3で「P1=#P1
#」と確保された記憶域のポインタ値をP1に代入して
いる。
【0074】当該動的な記憶域に対する「FREE文」
が出現するソースプログラム6(図7参照)の位置36
は、変更後のソースプログラムにおいては、図13に示
すように、削除されている。
が出現するソースプログラム6(図7参照)の位置36
は、変更後のソースプログラムにおいては、図13に示
すように、削除されている。
【0075】また、エントリ#5に対応する動的な記憶
域に対する「ALLOCATE文」が出現する元ソース
プログラム6の位置37は、変更後のソースプログラム
においては、図13に示す位置37のように変更されて
いる。
域に対する「ALLOCATE文」が出現する元ソース
プログラム6の位置37は、変更後のソースプログラム
においては、図13に示す位置37のように変更されて
いる。
【0076】そして、当該動的な記憶域に対する「FR
EE文」が出現する元ソースプログラム6の位置41、
48は、変更後のソースプログラムでは削除され、グル
ープ#1の終了位置である元ソースプログラム6の位置
50は、変更後のソースプログラムにおいては、図13
の位置50−1、50のように変更される。
EE文」が出現する元ソースプログラム6の位置41、
48は、変更後のソースプログラムでは削除され、グル
ープ#1の終了位置である元ソースプログラム6の位置
50は、変更後のソースプログラムにおいては、図13
の位置50−1、50のように変更される。
【0077】グループ#2についてもグループ#1と同
様にして、生存区間情報9(図10参照)の生存区間テ
ーブルのエントリ#2、エントリ#3に対応する動的な
記憶域に対する「ALLOCATE文」、「FREE
文」が出現する元ソースプログラム6の該当位置が、変
更後のソースプログラムにおいては、図13に示すよう
に変更される。
様にして、生存区間情報9(図10参照)の生存区間テ
ーブルのエントリ#2、エントリ#3に対応する動的な
記憶域に対する「ALLOCATE文」、「FREE
文」が出現する元ソースプログラム6の該当位置が、変
更後のソースプログラムにおいては、図13に示すよう
に変更される。
【0078】以上により、本発明の実施例による動的記
憶域の割り付け方式の処理が完了し、ソースプログラム
6中の動的な記憶域に対する5つの「ALLOCATE
文」、7つの「FREE文」が、変更後のソースプログ
ラムにおいては、図13に示すように、「ALLOCA
TE文」が3つ、「FREE文」が4つに削減されてい
る。
憶域の割り付け方式の処理が完了し、ソースプログラム
6中の動的な記憶域に対する5つの「ALLOCATE
文」、7つの「FREE文」が、変更後のソースプログ
ラムにおいては、図13に示すように、「ALLOCA
TE文」が3つ、「FREE文」が4つに削減されてい
る。
【0079】なお、上記実施例ではPL/I言語による
動的記憶域の確保・解放のプログラム例を説明したが、
本発明のPL/I言語に限定されるものでなく、他のプ
ログラミング言語による動的記憶域の確保・解放要求に
対しても適用可能である。
動的記憶域の確保・解放のプログラム例を説明したが、
本発明のPL/I言語に限定されるものでなく、他のプ
ログラミング言語による動的記憶域の確保・解放要求に
対しても適用可能である。
【0080】
【発明の効果】以上説明したように、本発明によれば、
プログラム中の動的な記憶域の確保・解放に関する処理
のオーバヘッドの減少するという効果を奏する。
プログラム中の動的な記憶域の確保・解放に関する処理
のオーバヘッドの減少するという効果を奏する。
【0081】この理由は、本発明においては、プログラ
ム中の動的な記憶域の確保・解放の要求を静的に解析可
能な範囲で解析して、生存区間が重複しない複数の動的
な記憶域を検出し、複数の動的な記憶域の共有化を図る
ことによって、動的な記憶域の確保・解放のための記憶
域管理用ライブラリ関数の呼出しを削減したことによ
り、少なくとも削減された記憶域管理用ライブラリ関数
分だけオーバヘッドが低減されるためである。
ム中の動的な記憶域の確保・解放の要求を静的に解析可
能な範囲で解析して、生存区間が重複しない複数の動的
な記憶域を検出し、複数の動的な記憶域の共有化を図る
ことによって、動的な記憶域の確保・解放のための記憶
域管理用ライブラリ関数の呼出しを削減したことによ
り、少なくとも削減された記憶域管理用ライブラリ関数
分だけオーバヘッドが低減されるためである。
【図1】本発明の実施の形態を示す構成を示す図であ
る。
る。
【図2】本発明の実施の形態におけるデータフロー情報
7の構成を示す図である。
7の構成を示す図である。
【図3】本発明の実施の形態における制御フロー情報8
の構成を示す図である。
の構成を示す図である。
【図4】本発明の実施の形態における生存区間情報9の
構成を示す図である。
構成を示す図である。
【図5】本発明の実施の形態における生存区間重複状況
情報10の構成を示す図である。
情報10の構成を示す図である。
【図6】本発明の実施の形態におけるグループ情報11
の構成を示す図である。
の構成を示す図である。
【図7】本発明の実施例におけるソースプログラム6の
具体例を示す図である。
具体例を示す図である。
【図8】本発明の実施例におけるデータフロー情報7の
具体例を示す図である。
具体例を示す図である。
【図9】本発明の実施例における制御フロー情報8の具
体例を示す図である。
体例を示す図である。
【図10】本発明の実施例における生存区間情報9の具
体例を示す図である。
体例を示す図である。
【図11】本発明の実施例における生存区間重複状況情
報10の具体例を示す図である。
報10の具体例を示す図である。
【図12】本発明の実施例におけるグループ情報11の
具体例を示す図である。
具体例を示す図である。
【図13】本発明の実施例におけるソースプログラム6
の変更後の具体例を示す図である。
の変更後の具体例を示す図である。
1 言語処理系 2 生存区間検出手段 3 生存区間重複検出手段 4 グループ化手段 5 プログラム変更手段 6 ソースプログラム 7 データフロー情報 8 制御フロー情報 9 生存区間情報 10 生存区間重複状況情報 11 グループ情報
Claims (2)
- 【請求項1】ソース・プログラムを解析し該プログラム
中で発行される動的な記憶域の確保・解放要求に関する
データフロー情報、及び該プログラムの制御フロー情報
に基づき、複数の動的な記憶域間での生存区間の重複状
況を検出し、共有可能な複数の記憶域を検出して共有さ
せることにより、動的な記憶域の確保・解放のための記
憶域管理用のライブラリ呼出しを削減するように前記ソ
ース・プログラムを自動修正する手段を備えたことを特
徴とする、動的記憶域割り付け方式。 - 【請求項2】プログラムの実行中に動的に記憶域を確保
・解放する機能を有するプログラミング言語に対する言
語処理系において、 確保する記憶域のサイズがプログラムの翻訳時に判明す
る、動的な記憶域の確保要求を検出し、前記確保要求に
対して返却された記憶域を識別するポインタ値に関する
データフローと、プログラムの制御フローと、を解析し
て、前記ポインタ値が識別する記憶域に対する確保要求
から最も離れた位置の解放要求を検出し、これにより確
保された記憶域の生存区間を検出する生存区間検出手段
と、 前記生存区間検出手段によって検出された複数の動的記
憶域の生存区間の重複を検査する生存区間重複検査手段
と、 前記生存区間重複検査手段によって判明した生存区間の
重複状況を考慮して、同一の記憶域を共有可能な1又は
複数の動的記憶域にグループ化するグループ化手段と、 一つのグループ中の動的記憶域のうち、最も大きいサイ
ズの記憶域を該グループ中で、その生存区間が最も早く
開始される動的記憶域の生存区間の先頭で確保し、該グ
ループ中でその生存区間が最も遅く終了する動的記憶域
の生存区間の最後で解放し、同一グループに属する動的
記憶域の確保・解放の要求を無効として、グループの先
頭で確保された記憶域を共有して利用するように、プロ
グラムを変更するプログラム変更手段と、 を備えたことを特徴とする動的記憶域割り付け方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP8168634A JPH09330232A (ja) | 1996-06-07 | 1996-06-07 | 動的記憶域割り付け方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP8168634A JPH09330232A (ja) | 1996-06-07 | 1996-06-07 | 動的記憶域割り付け方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH09330232A true JPH09330232A (ja) | 1997-12-22 |
Family
ID=15871687
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP8168634A Pending JPH09330232A (ja) | 1996-06-07 | 1996-06-07 | 動的記憶域割り付け方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH09330232A (ja) |
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6647547B1 (en) | 1999-05-18 | 2003-11-11 | Matsushita Electric Industrial Co., Ltd. | Program conversion apparatus for eliminating unnecessary indications of dynamic memory allocation from a source program and generating an executable program |
| JP2005071331A (ja) * | 2003-08-26 | 2005-03-17 | Microsoft Corp | トランザクショナルプロセスのデータフロー解析 |
| US8028017B2 (en) * | 2009-04-16 | 2011-09-27 | International Business Machines Corporation | Virtual controllers with a large data center |
| JP2023004763A (ja) * | 2021-06-28 | 2023-01-17 | 富士電機株式会社 | プログラム変換装置、プログラム変換方法およびプログラム |
-
1996
- 1996-06-07 JP JP8168634A patent/JPH09330232A/ja active Pending
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6647547B1 (en) | 1999-05-18 | 2003-11-11 | Matsushita Electric Industrial Co., Ltd. | Program conversion apparatus for eliminating unnecessary indications of dynamic memory allocation from a source program and generating an executable program |
| JP2005071331A (ja) * | 2003-08-26 | 2005-03-17 | Microsoft Corp | トランザクショナルプロセスのデータフロー解析 |
| US8196122B2 (en) | 2003-08-26 | 2012-06-05 | Microsoft Corporation | Data flow analysis of transactional processes |
| US8028017B2 (en) * | 2009-04-16 | 2011-09-27 | International Business Machines Corporation | Virtual controllers with a large data center |
| JP2023004763A (ja) * | 2021-06-28 | 2023-01-17 | 富士電機株式会社 | プログラム変換装置、プログラム変換方法およびプログラム |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5642501A (en) | Computer method and apparatus for asynchronous ordered operations | |
| US4991088A (en) | Method for optimizing utilization of a cache memory | |
| EP0549140A2 (en) | Record updating method | |
| JPH1115726A (ja) | コンピュータ制御方法、装置、システム、およびコンピュータプログラム製品 | |
| JPH05204656A (ja) | スレッド固有データ保持方法 | |
| US6129458A (en) | Cache optimization method | |
| JP3611295B2 (ja) | コンピュータシステム、メモリ管理方法及び記憶媒体 | |
| US5634120A (en) | Computer system supporting utilization of utility functions applicable to concurrently executing jobs by monitoring job excution characteristics and determining eligible job combinations for utility function | |
| JPH09330232A (ja) | 動的記憶域割り付け方式 | |
| JPH04219844A (ja) | 高速媒体優先解放型排他方式 | |
| Kersten et al. | Application of an optimistic concurrency control method | |
| CN117519945A (zh) | 一种数据库资源调度方法、装置及系统 | |
| KR20020070270A (ko) | 미사용된 방식들의 쓰레기 수집을 위한 방법 | |
| JP2787107B2 (ja) | バッファ制御方式及び装置 | |
| CN121029432B (zh) | 融合算子执行方法、电子设备、存储介质和程序产品 | |
| JP2000132406A (ja) | オブジェクトメモリ最適化方法 | |
| JPH0444140A (ja) | 仮想メモリ制御方法 | |
| JP3693311B2 (ja) | 分散処理システム | |
| JPH0877068A (ja) | マルチプロセッサシステム及びメモリアロケーション最適化方法 | |
| JP3511935B2 (ja) | マルチスレッド・プログラムにおけるファイル書込方式 | |
| JP3293821B2 (ja) | 動的リンクシステム | |
| CN115437929A (zh) | 一种基于逃逸分析的安卓活动管理服务同步负载削减方法 | |
| CN119806823A (zh) | 一种多核设备rcu内存释放方法、系统及可读存储介质 | |
| KR20020063365A (ko) | 다중 프로세서의 공유메모리 실시간 공유 사용방법 | |
| JPS5913062B2 (ja) | 多重処理スケジユ−リング処理方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20000201 |