(57)【要約】【課題】オブジェクトコード実行時に、自動変数に対するデータアクセス時間を短縮できるコンパイル装置を提供すること【解決手段】コンパイル装置１は、コンパイル部４０内に自動変数解析部４１１と、自動変数スタック処理部４２１と、を備える。自動変数解析部４１１は、ソースプログラムに含まれる自動変数を解析した解析情報を抽出する。自動変数スタック処理部４２１は、自動変数解析部４１１による解析に応じて、自動変数を格納するスタック領域を複数の記憶装置から選択する。【選択図】図１
2012038246.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムをコンパイルするコンパイル装置であって、
前記ソースプログラムに含まれる自動変数を解析する自動変数解析部と、
前記自動変数解析部の解析に応じて、前記自動変数を格納するスタック領域を複数の記憶装置から選択する自動変数スタック処理部と、
を備えるコンパイル装置。
【請求項２】
前記自動変数スタック処理部は、前記選択の際に、前記スタック領域の選択にかかる条件を定めたスタック領域選択情報を参照することを特徴とする請求項１に記載のコンパイル装置。
【請求項３】
前記スタック領域選択情報は、前記自動変数のデータサイズに応じて前記自動変数を格納するスタック領域を選択する条件を含むことを特徴とする請求項２に記載のコンパイル装置。
【請求項４】
前記スタック領域選択情報は、前記ソースプログラムにおいて前記自動変数に設定可能な修飾子と、前記修飾子が設定された自動変数を格納するスタック領域との関係を規定した条件を含むことを特徴とする請求項２または請求項３に記載のコンパイル装置。
【請求項５】
前記スタック領域選択情報は、複数の条件を含むことを特徴とする請求項２乃至請求項４のいずれか１項に記載のコンパイル装置。
【請求項６】
前記複数の条件の各々には、適用される順序に関する優先順位が設定されていることを特徴とする請求項５に記載のコンパイル装置。
【請求項７】
前記自動変数解析部は、前記ソースプログラムに含まれる各自動変数のデータサイズ、前記ソースプログラムに含まれる各自動変数に付与された前記修飾子、の少なくとも一方に関する解析を行うことを特徴とする請求項１乃至６のいずれか１項に記載のコンパイル装置。
【請求項８】
前記複数の記憶装置を構成する第１の記憶装置は、前記コンパイル装置内部に配置されたＲＡＭ（Random Access Memory）であり、
前記複数の記憶装置を構成する第２の記憶装置は、前記コンパイル装置に接続されたＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）のいずれかであることを特徴とする請求項１乃至７のいずれか１項に記載のコンパイル装置。
【請求項９】
ソースプログラムをコンパイルするコンパイル方法であって、
前記ソースプログラムに含まれる自動変数を解析し、
前記解析に応じて、前記自動変数を格納するスタック領域を複数の記憶装置から選択するコンパイル方法。
【請求項１０】
ソースプログラムをコンパイルするコンパイラであって、
前記ソースプログラムに含まれる自動変数を解析し、
前記解析に応じて、前記自動変数を格納するスタック領域を複数の記憶装置から選択するコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンパイル装置、コンパイル方法、コンパイラに関する。
【背景技術】
【０００２】
コンパイラは、プログラミング言語により記述されたソースプログラムを、コンピュータが直接実行可能な機械語のプログラム（以降では、オブジェクトコードと記載する。）に変換する処理（コンパイル）を行う。
【０００３】
特許文献１は、コンパイル処理を実現する情報処理装置に関する技術を開示している。図９は、特許文献１に記載の情報処理装置の概略を示すブロック図である。コンパイル部４０は、プログラム解析部４１と、オブジェクトコード生成部４２と、を備える。プログラム解析部４１は、指定されたソースプログラムＳＰを読み込み、ソースプログラムＳＰの解析を行う。具体的には、プログラム解析部４１は、ソースプログラムＳＰの字句解析、構文解析、意味解析等を行う。プログラム解析部４１は、解析結果をオブジェクトコード生成部４２に出力する。
【０００４】
オブジェクトコード生成部４２は、プログラム解析部４１から入力された解析結果に基づいてコンピュータが直接実行可能なオブジェクトコードＯＰを生成する。
【０００５】
次に特許文献１等の情報処理装置において、ソースプログラムと、当該ソースプログラムから生成されたオブジェクトコードを実行した際のスタック領域と、の関係を説明する。スタック領域とは、オブジェクトコードの実行中に、関数の呼び出しに関する情報を格納する特殊なスタック（コールスタック）用に確保された領域である。
【０００６】
ある関数内から他の関数を呼び出す場合において、スタック領域には関数リターン時の戻り先アドレス、引数、自動変数（ローカル変数）、及びテンポラリ変数（オブジェクトコード実行の途中結果を保持するための変数であり、コンパイラが生成する変数）が格納される。関数呼び出し時には、スタック領域の先頭アドレスから、戻り先アドレス等の格納データの合計サイズに相当する領域が確保され、関数リターン時に確保した領域が解放される。スタック領域の確保と解放は、スタックポインタ（コールスタック内において最も後に参照された位置を示すポインタ）の値の加算／減算により行うことができる。上述の処理により確保される領域は、関数毎に異なり、関数フレームと呼ばれる。
【０００７】
図１０は、Ｃ言語ソースプログラムによる関数呼び出しとスタック領域との関係を示している。図１０の例では、ｍａｉｎ関数内からｃｈａｒ型の変数ａ（＝１）、ｂ（＝２）を指定して関数ＦｕｎｃＡを呼び出している。関数ＦｕｎｃＡを呼び出す前のスタック領域の先頭アドレスは、０ｘｆｆ１０である。関数ＦｕｎｃＡを呼び出した際には、関数ＦｕｎｃＡの関数フレームに該当する領域が確保され、スタック領域の先頭アドレスは０ｘｆｆ０８となる。なお、関数ＦｕｎｃＡの呼び出し時に指定された実引数ａはスタック領域の０ｘｆｆ０ｃに格納され、実引数ｂはスタック領域の０ｘｆｆ０ｅに格納される。関数ＦｕｎｃＡ内の自動変数ｒｅｓｕｌｔは、スタック領域の０ｘｆｆ０ａに格納される。関数ＦｕｎｃＡの処理終了時（関数リターン時）には、関数フレームが解放され、スタック領域の先頭アドレスは０ｘｆｆ１０となる。
【０００８】
上述したように、既存のコンパイル処理により生成されたオブジェクトコードの実行時には、自動変数（図１０では自動変数ｒｅｓｕｌｔ）は関数戻り値アドレス等と同様に１つのスタック領域に格納される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００１−０１４１７３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１に記載の情報処理装置では、オブジェクトコード実行時に効率的なデータ処理ができないおそれがある。当該問題について以下に説明する。
【００１１】
近年、デジタルスチールカメラ等の情報処理装置では、大容量データを扱う画像処理用プログラムの実行を行う必要がある。当該情報処理装置は、一般に内部にＲＡＭ（Random Access Memory）を備え、かつ外部接続された記憶装置（たとえばＳＲＡＭ（Static Random Access Memory），ＤＲＡＭ（Dynamic Random Access Memory））を利用することも可能である。
【００１２】
当該情報処理装置において、内部ＲＡＭの領域をスタック領域とするのみではスタック領域の容量が十分でなく、大容量データを扱う画像処理用プログラムを処理できない場合がある。この場合において、内部ＲＡＭの代わりに、外部接続された記憶装置をスタック領域とすることができる。しかし、内部ＲＡＭと外部記憶装置ではアクセス速度が異なる。特許文献１では、当該アクセス速度についての技術的思想が開示されていない。そのため、特許文献１の情報処理装置では、効率的なデータアクセスができない恐れがある。詳細には、オブジェクトコードの実行時に、データに高速にアクセスできることが望まれる自動変数をアクセス速度の遅い外部記憶装置内のスタック領域に格納してしまう恐れがある。これにより、オブジェクトコードの実行時のデータの取り出し処理が遅くなり、効率的にオブジェクトコードを実行できない。
【課題を解決するための手段】
【００１３】
本発明にかかるコンパイル装置の一態様は、ソースプログラムをコンパイルするコンパイル装置であって、前記ソースプログラムに含まれる自動変数を解析する自動変数解析部と、前記自動変数解析部の解析に応じて、前記自動変数を格納するスタック領域を複数の記憶装置から選択する自動変数スタック処理部と、を備えるものである。
【００１４】
本発明においては、自動変数スタック処理部は、自動変数の特性に応じて当該自動変数を格納するスタック領域を選択する。これにより、各自動変数は、オブジェクトコード実行時に各自動変数の特性に合わせた最適なスタック領域に格納され、自動変数に対するデータアクセス時間が短縮される。
【発明の効果】
【００１５】
本発明によれば、オブジェクトコード実行時に、自動変数に対するデータアクセス時間を短縮できるコンパイル装置、コンパイル方法、及びコンパイラを提供することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１にかかるコンパイル装置の構成を示すブロック図である。
【図２Ａ】実施の形態１にかかる自動変数解析情報を抽出するためのソースコードを示す図である。
【図２Ｂ】実施の形態１にかかる自動変数解析情報の例を示す図である。
【図３】実施の形態１にかかるスタック領域設定情報の例を示す図である。
【図４】実施の形態１にかかるスタック領域選択情報の例を示す図である。
【図５】実施の形態１にかかる自動変数解析部の処理を示すフローチャートである。
【図６】実施の形態１にかかる自動変数スタック処理部の処理を示すフローチャートである。
【図７Ａ】実施の形態１にかかるコンパイル装置の動作例を説明するためのソースコードを示す図である。
【図７Ｂ】実施の形態１にかかるコンパイル装置の動作例を説明するための自動変数解析情報を示す図である。
【図７Ｃ】実施の形態１にかかるコンパイル装置の動作例を示す概念図である。
【図８Ａ】実施の形態１にかかるコンパイル装置の動作例を説明するためのソースコードを示す図である。
【図８Ｂ】実施の形態１にかかるコンパイル装置の動作例を説明するための自動変数解析情報を示す図である。
【図８Ｃ】実施の形態１にかかるコンパイル装置の動作例を示す概念図である。
【図９】特許文献１にかかる情報処理装置の構成を示すブロック図である。
【図１０】一般的なプログラミング言語による関数呼び出しの概念を示す図である。
【発明を実施するための形態】
【００１７】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。まず、図１を参照して本実施の形態にかかるコンパイル装置の構成を説明する。本実施の形態にかかるコンパイル装置１は、ＣＰＵ１０、ＲＯＭ２０、ＲＡＭ３０、及びコンパイル部４０を備える。
【００１８】
コンパイル装置１は、外部の記憶装置と接続可能である。本例では、コンパイル装置１は、ＳＲＡＭ（Static Random Access Memory）である記憶装置１００と、ＤＲＡＭ（Dynamic Random Access Memory）である記憶装置１１０と接続している。記憶装置１００及び１１０は、コンパイル装置１がオブジェクトコードを実行する際に拡張スタック領域となる記憶領域を有する。拡張スタック領域とは、自動変数のみが格納され得るスタック領域である。以下の説明では、記憶装置１００内の拡張スタック領域を拡張スタック領域Ａと称し、記憶装置１１０内の拡張スタック領域を拡張スタック領域Ｂと称する。
【００１９】
ＣＰＵ（Central Processing Unit）１０は、装置各部を制御する処理部である。ＲＯＭ（Read Only Memory）２０は、ＣＰＵ１０において実行される各種プログラム、変数、初期値等を記憶する記憶装置である。
【００２０】
ＲＡＭ（Random Access Memory）３０は、ＣＰＵ１０において生成される各種演算データ等を一時的に記憶する記憶装置である。ＲＡＭ３０は、オブジェクトコード実行時に基本スタック領域となる。基本スタック領域とは、関数リターン時の戻り先アドレス、引数、自動変数（ローカル変数）、及びテンポラリ変数が格納されるスタック領域である。
【００２１】
コンパイル部４０は、ソースプログラムＳＰを読み込み、コンピュータが直接実行可能なオブジェクトコードＯＰを生成する処理部である。コンパイル部４０は、プログラム解析部４１と、オブジェクトコード生成部４２と、を備える。
【００２２】
プログラム解析部４１は、ソースプログラムＳＰの各種解析（字句解析、構文解析、意味解析等）を行う。さらにプログラム解析部４１は、字句解析等を行う処理部（図示せず）に加えて、ソースプログラムＳＰ内に含まれる自動変数（ローカル変数）に関する解析情報を抽出する自動変数解析部４１１を備える。
【００２３】
自動変数解析部４１１は、ソースプログラムＳＰ内に含まれる自動変数を解析した解析情報（自動変数解析情報）を出力する処理部である。自動変数解析部４１１は、抽出した自動変数解析情報５０を後述の自動変数スタック処理部４２１に供給する。
【００２４】
図２は、自動変数解析情報５０の一例を示す概念図である。図２Ａは、解析対象となるソースプログラムＳＰである。なお、図２Ａは、Ｃ言語により記述されたソースプログラムの例を示しているが、自動変数解析部４１１は、任意の高級言語により記載されたソースプログラムを解析対象とすることができる。
【００２５】
図２Ｂは、自動変数解析部４１１が図２Ａに示したソースプログラムＳＰから抽出した自動変数解析情報５０である。自動変数解析情報５０は、テーブル形式のデータ構造により表わすことができる。自動変数解析情報５０の各データ列は、関数名、変数名、変数の型、修飾子、配列の個数、自動変数のデータサイズに関する情報を保持する。修飾子は、自動変数が格納されるスタック領域を明示的に指定するための予約語である。自動変数のデータサイズは、変数の型及び配列の個数により定まる。
【００２６】
図２Ａの関数ｐｒｏｃには７つの自動変数（i、ｊ、ｂｕｆＡ、ｂｕｆＢ、ｂｕｆＣ、ｂｕｆＤ、ｋ）が含まれる。そのため、関数ｐｒｏｃに関する７つのデータ列が抽出される。自動変数解析部４１１は、ソースプログラムＳＰに含まれる関数毎に、全ての自動変数に関するデータ列を抽出する。
【００２７】
再び、図１を参照してコンパイル装置１の構成を説明する。コンパイル部４０に含まれるオブジェクトコード生成部４２は、プログラム解析部４１から入力されたソースプログラムＳＰの解析結果を用いてオブジェクトコードＯＰを生成する処理部である。オブジェクトコード生成部４２は、ソースプログラムＳＰ内に含まれる各自動変数を、複数あるスタック領域のいずれかに格納する処理をオブジェクトコードＯＰに反映させる自動変数スタック処理部４２１を備える。
【００２８】
自動変数スタック処理部４２１には、自動変数解析情報５０、スタック領域設定情報５１、及びスタック領域選択情報５２が入力される。
【００２９】
スタック領域設定情報５１の一例を図３に示す。スタック領域設定情報５１は、テーブル形式のデータ構造により表わすことができる。スタック領域設定情報５１の各データ列は、識別子、メモリ属性、先頭アドレス、及びサイズに関する情報を保持する。各データ列は、各スタック領域に対応する。本実施の形態では、３つのスタック領域（基本スタック領域、拡張スタック領域Ａ、拡張スタック領域Ｂ）が存在するため、３つのデータ列がスタック領域設定情報５１に格納される。
【００３０】
識別子とは、各スタック領域を一意に識別するための情報であり、ソースプログラムＳＰ内の修飾子として用いられる。修飾子が付与された自動変数は、自動変数スタック処理部４２１により当該修飾子と対応するスタック領域に格納される。たとえば、"ＥＸＳＴＡＣＫＡ"という修飾子を付与された自動変数は、後述の自動変数スタック処理部４２１により拡張スタック領域Ａに格納される。
【００３１】
メモリ属性とは、スタック領域が配置される記憶領域の容量及びアクセススピードにより定まる属性である。たとえば、ＲＡＭ３０に配置された基本スタック領域は、高速アクセスが可能であり、容量が小さい（高速小容量）。記憶装置１００に配置された拡張スタック領域Ａは、中速アクセスが可能であり、容量がある程度大きい（中速中容量）。記憶装置１１０に配置された拡張スタック領域Ｂは、アクセススピードが低速であるが、容量が大きい（低速大容量）。
【００３２】
先頭アドレスとは、スタック領域の先頭アドレスを示す属性である。サイズとは、スタック領域のサイズである。たとえば、基本スタック領域は、ＲＡＭ３０の０ｘ０Ｆ００番地から２５６バイトの大きさを持つ領域である。拡張スタック領域Ａは、記憶装置１００の０ｘ２００００番地から１２８キロバイトの大きさを持つ領域である。拡張スタック領域Ｂは、記憶装置１１０の０ｘ８００００番地から５１２キロバイトの大きさを持つ領域である。なお、各記憶装置（ＲＡＭ３０、記憶装置１００、記憶装置１１０）は、一般にスタック領域以外のデータ領域としても使用するため、全ての記憶領域をスタック領域として割り当てることはしていない。
【００３３】
続いて、図４を参照してスタック領域選択情報５２について説明する。スタック領域選択情報５２は、各自動変数を格納するスタック領域を複数のスタック領域から選択するために用いる条件が設定される。スタック領域選択情報５２を各自動変数が要求されるデータアクセス速度を考慮して設定することにより、オブジェクトコード実行時の処理速度の向上を図る。本例では、自動変数のデータサイズが小さい場合、当該自動変数に対するデータアクセス速度が高速であることが要求される点を考慮した条件が定められている。たとえば、自動変数のサイズが５０バイト未満である場合、当該自動変数は高速低容量のスタック領域に格納される。
【００３４】
なお、スタック領域選択情報５２は、自動変数のデータアクセスを高速化するための任意の条件を設定できるものであればよい。たとえば、自動変数のデータサイズのみならず、自動変数のアクセス頻度を考慮してスタック領域選択情報５２を設定してもよい。
【００３５】
図４に示したように各条件は、適用される順序に関する優先順位が設定されていてもよい。本例では、優先順位の数値が小さい条件ほど優先して適用される。たとえば、自動変数に修飾子（ＥＸＳＴＡＣＫＡ等）が指定されていた場合、当該自動変数は修飾子に対応するスタック領域に格納され、他の条件は適用されない。
【００３６】
自動変数スタック処理部４２１は、自動変数解析情報５０、スタック領域設定情報５１、及びスタック領域選択情報５２を参照して、各自動変数を所望のスタック領域に格納する処理をオブジェクトコードＯＰに反映させる。たとえば、ある自動変数に修飾子が指定されておらず、当該自動変数のデータサイズが２バイトである場合、自動変数スタック処理部４２１は、当該自動変数を高速小容量の領域である基本スタック領域に格納する処理をオブジェクトコードＯＰに反映させる。
【００３７】
スタック領域設定情報５１、及びスタック領域選択情報５２は、たとえばハードディスク（不図示）上にファイル形式として保存することができる。ユーザは、コンパイル実行時に当該ファイルのファイルパスを指定することによりスタック領域設定情報５１、及びスタック領域選択情報５２を自動変数スタック処理部４２１に入力することができる。
【００３８】
続いて、本実施の形態にかかる自動変数解析部４１１の処理を図５のフローチャートを参照して説明する。自動変数解析部４１１は、ソースプログラムＳＰ内に未解析の自動変数があるか否かを判定する（Ｓ１１）。未解析の自動変数が無い場合（Ｓ１１：Ｎｏ）、自動変数解析部４１１は、生成した自動変数解析情報５０を自動変数スタック処理部４２１に出力し（Ｓ１４）、処理を終了する。
【００３９】
未解析の自動変数がある場合（Ｓ１１：Ｙｅｓ）、自動変数解析部４１１は、未解析の自動変数から関数名、変数名、変数の型、修飾子、配列の個数を抽出する（Ｓ１２）。さらに、自動変数解析部４１１は、抽出した変数の型と配列の個数から当該自動変数のデータサイズを算出する（Ｓ１３）。自動変数解析部４１１は、全ての自動変数に対して上述のＳ１２、Ｓ１３の処理を行う。
【００４０】
次に、本実施の形態にかかる自動変数スタック処理部４２１の処理を図６のフローチャートを参照して説明する。自動変数スタック処理部４２１は、未処理の自動変数があるか否かを判定する（Ｓ２１）。未処理の自動変数が無い場合（Ｓ２１：Ｎｏ）、自動変数スタック処理部４２１は、処理を終了する。
【００４１】
未処理の自動変数がある場合（Ｓ２１：Ｙｅｓ）、自動変数スタック処理部４２１は、自動変数解析情報５０から当該自動変数にかかるデータ列を読み出す（Ｓ２２）。自動変数スタック処理部４２１は、読み出したデータ列に修飾子（たとえばＥＸＳＴＡＣＫＡ）の指定があるか否かを判定する（Ｓ２３）。
【００４２】
修飾子の指定がある場合（Ｓ２３：Ｙｅｓ）、自動変数スタック処理部４２１は、スタック領域設定情報５１を参照し、当該修飾子に対応するスタック領域を処理対象の自動変数の格納先として選択する（Ｓ２４）。修飾子の指定がない場合（Ｓ２３：Ｎｏ）、自動変数スタック処理部４２１は、自動変数解析情報５０から読み出したデータ列のデータサイズを抽出する。自動変数スタック処理部４２１は、抽出したデータサイズと、スタック領域選択情報５２と、を比較して自動変数の格納先のメモリ属性（たとえば「高速低容量」）を選択する（Ｓ２５）。自動変数スタック処理部４２１は、選択したメモリ属性に基づいて、処理対象の自動変数を格納するスタック領域を選択する（Ｓ２６）。
【００４３】
自動変数スタック処理部４２１は、処理対象の自動変数をＳ２４またはＳ２６で選択したスタック領域に格納する処理をオブジェクトコードＯＰに反映する（Ｓ２７）。自動変数スタック処理部４２１は、上述の処理（Ｓ２２〜Ｓ２７）を全ての自動変数に対して行う。
【００４４】
次に、図７、図８を参照して本実施の形態にかかるコンパイル装置の動作例を説明する。図７Ａは、コンパイル対象のソースプログラムＳＰを示す。コンパイル部４０は、図７Ａに示すソースプログラムＳＰからオブジェクトコードＯＰを生成する。この際、コンパイル部４０内の自動変数解析部４１１は、図７Ｂに示す自動変数解析情報５０を生成する。なお以下の図７及び図８の例では、スタック領域設定情報５１、及びスタック領域選択情報５２には、図３、図４に示した情報が設定されている。図７Ｃは、当該オブジェクトコードＯＰを実行した場合の各スタック領域の状態を示す。
【００４５】
各自動変数（i，ｊ，ｂｕｆＡ，ｂｕｆＢ，ｂｕｆＣ，ｂｕｆＤ）には、いずれも修飾子が指定されていない。そのため、自動変数のデータサイズに応じて格納先のスタック領域が選択される。
【００４６】
データサイズが２バイトである自動変数i及びｊは、基本スタック領域に格納される。データサイズが１００００バイトであるｂｕｆＡは、拡張スタック領域Ａに格納される。データサイズが２００００バイトであるｂｕｆＢは、拡張スタック領域Ａに格納される。データサイズが１０００００バイトであるｂｕｆＣは、拡張スタック領域Ｂに格納される。データサイズが２０００００バイトであるｂｕｆＤは、拡張スタック領域Ｂに格納される。
【００４７】
次に、自動変数に修飾子が指定されている場合についての、本実施の形態にかかるコンパイル装置の動作例を説明する。図８Ａは、コンパイル対象のソースプログラムＳＰを示す。コンパイル部４０は、図８Ａに示すソースプログラムＳＰからオブジェクトコードＯＰを生成する。この際、コンパイル部４０内の自動変数解析部４１１は、図８Ｂに示す自動変数解析情報５０を生成する。図８Ｃは、当該オブジェクトコードＯＰを実行した場合の各スタック領域の状態を示す。
【００４８】
自動変数ｂｕｆＢには修飾子ＥＸＳＴＡＣＫＢが指定されている。そのため、自動変数ｂｕｆＢは、修飾子ＥＸＳＴＡＣＫＢと対応づけられた拡張スタック領域Ｂに格納される。同様に、自動変数ｂｕｆＣには修飾子ＥＸＳＴＡＣＫＡが指定されている。そのため、自動変数ｂｕｆＣは、修飾子ＥＸＳＴＡＣＫＡと対応づけられた拡張スタック領域Ａに格納される。その他の自動変数（i，ｊ，ｂｕｆＡ，ｂｕｆＤ）は、データサイズに応じたスタック領域に格納される。
【００４９】
続いて本実施の形態にかかるコンパイル装置の効果について説明する。上述のように、コンパイル部４０内の自動変数スタック処理部４２１は、自動変数の解析情報（自動変数解析情報）と、自動変数のデータアクセスを高速化するための条件を定めたスタック領域選択情報に基づいて、各自動変数を格納するスタック領域を選択する。これにより、各自動変数はデータ特性に合う最適なスタック領域に格納され、オブジェクトコードＯＰの実行の際に自動変数に対するデータアクセス時間を短縮できる。
【００５０】
さらに、ユーザが自動変数に所定の修飾子を指定することにより、自動変数を格納するスタック領域を明示的に指定することができる。これにより、ユーザが明示的にスタック領域の制御を行うことができる。
【００５１】
なお、コンパイル装置１が扱うプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００５２】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。本発明は、手続き型のプログラミング言語により記載されたソースプログラム、オブジェクト指向型のプログラミング言語により記載されたソースプログラムに適用できることは勿論である。
【符号の説明】
【００５３】
１      コンパイル装置
１０    ＣＰＵ
２０    ＲＯＭ
３０    ＲＡＭ
４０    コンパイル部
４１    プログラム解析部
４１１  自動変数解析部
４２    オブジェクトコード生成部
４２１  自動変数スタック処理部
５０    自動変数解析情報
５１    スタック領域設定情報
５２    スタック領域選択情報
１００  記憶装置
１１０  記憶装置
ＳＰ    ソースプログラム
ＯＰ    オブジェクトコード
【図１】
2012038246.tif 000003
【図２Ａ】
2012038246.tif 000004
【図２Ｂ】
2012038246.tif 000005
【図３】
2012038246.tif 000006
【図４】
2012038246.tif 000007
【図５】
2012038246.tif 000008
【図６】
2012038246.tif 000009
【図７Ａ】
2012038246.tif 000010
【図７Ｂ】
2012038246.tif 000011
【図７Ｃ】
2012038246.tif 000012
【図８Ａ】
2012038246.tif 000013
【図８Ｂ】
2012038246.tif 000014
【図８Ｃ】
2012038246.tif 000015
【図９】
2012038246.tif 000016
【図１０】
2012038246.tif 000017