(57)【要約】【課題】本発明は、スタック領域における変数の配置の決定を最適化するコンパイラ装置及び配置決定方法を提供することを目的とする。【解決手段】本発明は、複数のデータ属性を有する複数のデータの集合Ｘから、前記複数のデータ属性の何れかに基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択し、データを選択する毎に、選択したデータの記憶領域内への配置の決定を試み、当該データの配置を決定できない場合毎に、選択したデータの中から除外対象となるデータを、前記第１基準に用いたデータ属性とは異なる第２基準に従って選択し、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すコンパイラ装置である。【選択図】　図３
2004070439.tif 000002
【特許請求の範囲】
【請求項１】
データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置であって、
複数のデータ属性を有する複数のデータの集合Ｘから、前記複数のデータ属性の何れかに基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択手段と、
データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定手段と、
当該データの配置を前記記憶領域内に決定できない場合毎に、
選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定手段と
を備え、
前記配置決定データ選択手段は、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返す
ことを特徴とするコンパイラ装置。
【請求項２】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択手段は、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データのサイズの降順であり、
前記除外データ特定手段は、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定する
ことを特徴とする請求項１記載のコンパイラ装置。
【請求項３】
前記コンパイラはさらに、前記配置決定データ選択手段による前記処理の繰返しが終了後、前記除外データ特定手段によって特定された除外対象データの中からデータのサイズの昇順に従って、順次データを選択する再配置決定データ選択手段を備え、
前記配置決定手段はさらに、前記再配置決定データ選択手段によってデータが選択される毎に当該データの前記記憶領域内への配置を決定する
ことを特徴とする請求項２記載のコンパイラ装置。
【請求項４】
前記配置決定データ選択手段はさらに、前記処理の繰返しを終了した後、前記除外データ特定手段によって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、
前記配置決定手段はさらに、前記配置決定データ選択手段によってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、
前記除外データ特定手段は、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、
前記配置決定データ選択手段は、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たな記憶領域内に入るように決定されるまで繰返し、
前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、
前記配置決定データ選択手段はさらに、再除外対象データについて、前記再選択処理を繰返し、
前記配置決定手段はさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、
前記除外データ特定手段はさらに、前記再配置決定処理により当該再除外対象データの配置を決定できない場合毎に、前記再除外対象特定処理を繰返す
ことを特徴とする請求項１記載のコンパイラ装置。
【請求項５】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データのサイズの降順である
ことを特徴とする請求項４記載のコンパイラ装置。
【請求項６】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データの参照頻度の昇順である
ことを特徴とする請求項４記載のコンパイラ装置。
【請求項７】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択手段は、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データの参照頻度の昇順であり、
前記除外データ特定手段は、データの参照頻度の昇順に、選択されたデータの中から除外対象となるデータを特定する
ことを特徴とする請求項１記載のコンパイラ装置。
【請求項８】
前記コンパイラはさらに、前記配置決定データ選択手段による前記処理の繰返しが終了後、特定された除外対象データの中からデータの参照頻度の降順に従って、順次データを選択する再配置決定データ選択手段を備え、
前記配置決定手段はさらに、前記再配置決定データ選択手段によってデータが選択される毎に当該データの前記記憶領域内への配置を決定する
ことを特徴とする請求項７記載のコンパイラ装置。
【請求項９】
データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置におけるデータ配置方法であって、
複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、
データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと
当該データの配置を前記記憶領域内に決定できない場合に、
選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定ステップと
を含み、
前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返す
ことを特徴とするデータ配置方法。
【請求項１０】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データのサイズの降順であり、
前記除外データ特定ステップは、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定する
ことを特徴とする請求項９記載のデータ配置決定方法。
【請求項１１】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データの参照頻度の昇順であり、
前記除外データ特定ステップは、データの参照頻度の昇順に、選択されたデータの中から除外対象となるデータを特定する
ことを特徴とする請求項９記載のデータ配置決定方法。
【請求項１２】
前記配置決定データ選択ステップはさらに、前記処理の繰返しを終了した後、前記除外データ特定ステップによって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、
前記配置決定ステップはさらに、前記配置決定データ選択ステップによってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、
前記除外データ特定ステップは、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、
前記配置決定データ選択ステップは、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たな記憶領域内に入るように決定されるまで繰返し、
前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、
前記配置決定データ選択ステップはさらに、再除外対象データについて、前記再選択処理を繰返し、
前記配置決定ステップはさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、
前記除外データ特定ステップはさらに、前記再配置決定処理により当該再除外対象データの配置を決定できない場合毎に、前記再除外対象特定処理を繰返す
ことを特徴とする請求項９記載のデータ配置決定方法。
【請求項１３】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データのサイズの降順である
ことを特徴とする請求項１２記載のデータ配置決定方法。
【請求項１４】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データの参照頻度の昇順である
ことを特徴とする請求項１２記載のデータ配置決定方法。
【請求項１５】
データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置に用いられるプログラムであって、
前記プログラムは、
複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、
データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと
当該データの配置を前記記憶領域内に決定できない場合に、
選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定ステップと
を含み、
前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返す
ことを特徴とするプログラム。
【請求項１６】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データのサイズの降順であり、
前記除外データ特定ステップは、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定する
ことを特徴とする請求項１５記載のプログラム。
【請求項１７】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データの参照頻度の昇順であり、
前記除外データ特定ステップは、データの参照頻度の昇順に、選択されたデータの中から除外対象となるデータを特定する
ことを特徴とする請求項１５記載のプログラム。
【請求項１８】
前記配置決定データ選択ステップはさらに、前記処理の繰返しを終了した後、前記除外データ特定ステップによって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、
前記配置決定ステップはさらに、前記配置決定データ選択ステップによってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、
前記除外データ特定ステップは、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、
前記配置決定データ選択ステップは、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たな記憶領域内に入るように決定されるまで繰返し、
前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、
前記配置決定データ選択ステップはさらに、再除外対象データについて、前記再選択処理を繰返し、
前記配置決定ステップはさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、
前記除外データ特定ステップはさらに、前記配置決定処理により当該再除外対象データの配置を決定できない場合毎に、再除外対象特定処理を繰返す
ことを特徴とする請求項１５記載のプログラム。
【請求項１９】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データのサイズの降順である
ことを特徴とする請求項１８記載のプログラム。
【請求項２０】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データの参照頻度の昇順である
ことを特徴とする請求項１８記載のプログラム。
【請求項２１】
データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラに用いられるプログラムを記録したコンピュータ読取可能な記録媒体であって、
前記プログラムは、
複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、
データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと
当該データの配置を前記記憶領域内に決定できない場合に、
選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、データ属性に基いて定めた第２基準に従って特定する除外データ特定ステップと
を含み、
前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返す
ことを特徴とするコンピュータ読取可能な記録媒体。
【請求項２２】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データのサイズの降順であり、
前記除外データ特定ステップは、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定する
ことを特徴とする請求項２１記載のコンピュータ読取可能な記録媒体。
【請求項２３】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、
前記第２基準は、データの参照頻度の昇順であり、
前記除外データ特定ステップは、データの参照頻度の昇順に、選択されたデータの集合から除外対象となるデータを特定する
ことを特徴とする請求項２１記載のコンピュータ読取可能な記録媒体。
【請求項２４】
前記配置決定データ選択ステップはさらに、前記処理の繰返しを終了した後、前記除外データ特定ステップによって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、
前記配置決定ステップはさらに、前記配置決定データ選択ステップによってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、
前記除外データ特定ステップは、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、
前記配置決定データ選択ステップは、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たなの記憶領域内に入るように決定されるまで繰返し、
前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、
前記配置決定データ選択ステップはさらに、再除外対象データについて、前記再選択処理を繰返し、
前記配置決定ステップはさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、
前記除外データ特定ステップはさらに、前記配置決定処理により当該再除外対象データの配置を決定できない場合毎に、再除外対象特定処理を繰返す
ことを特徴とする請求項２１記載のコンピュータ読取可能な記録媒体。
【請求項２５】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データのサイズの降順である
ことを特徴とする請求項２４記載のコンピュータ読取可能な記録媒体。
【請求項２６】
前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、
前記第２基準は、データの参照頻度の昇順である
ことを特徴とする請求項２４記載のコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソースプログラムを機械語コードのオブジェクトプログラムに翻訳するコンパイラに関し、特にデータの記憶領域への配置を決定するコンパイラ装置及びコンパイラ装置による変数データの記憶領域への配置決定方法に関する。
【０００２】
【従来の技術】
近年、ソフトウェアの大規模化に伴い、大規模システムの開発に適したＣ言語やＣ＋＋言語などの高級言語がソフトウェアに使用されるようになってきている。これらの高級言語で記述されたソースプログラムは、専用のコンパイラによってＣＰＵが実行可能な機械語コードに翻訳された後、メモリ上にロードされ、実行される。メモリ上にロードされるプログラムは、命令を示すコードと変数を示すデータとの組から構成され、コードの示す命令は、当該コードと組のデータを参照することにより実行される。
【０００３】
ここで、データには、プログラムの実行中常にデータを格納するための記憶領域が確保される大域変数と所定の関数が呼び出されたときにデータを格納するための記憶領域（スタック領域）が確保される自動変数の２種類がある。以下、「自動変数」を「変数」と呼ぶ。
コンパイラは、所定の各関数と組の変数に対して、スタック領域における配置を決定する。図１２は、従来法１における、コンパイラによるスタック領域における変数の配置の決定処理を示すフローチャートである。
【０００４】
コンパイラは、ソースプログラムを読出し（ステップＳ１）、読み出したプログラムの構文解析の処理を実行し（ステップＳ２）、解析した結果に基いて、スタック領域への配置対象となる変数対照表を作成する（ステップＳ３）。
ここで、「変数対照表」とは、変数の型と変数名とデータサイズ（以下、「サイズ」という。）とアラインメントとの対応関係を示す表のことをいう。
【０００５】
又、「アラインメント」とは、変数の型に応じて予め定められている、当該変数のスタック領域への配置に対する制約の大きさを示す値のことであり、例えば、アラインメントが２の場合は、当該変数をアドレスが２の倍数のスタック領域に配置しなければならないことを示し、アラインメントが４の場合は、アドレスが４の倍数のスタック領域に配置しなければならないことを示す。
【０００６】
図４は、変数対照表の具体例を示す図である。図４の例では、４つの変数の型（ｃｈａｒ，ｉｎｔ，ｃｈａｒ［］，ｄｏｕｂｌｅ［］）について、上記の対応関係を示している。
コンパイラは、変数対照表の各変数をスタック領域への配置対象集合の構成要素とし（ステップＳ４）、配置対象集合からサイズが最小の変数を選択し、当該変数のスタック領域における配置を決定し（ステップＳ５）、配置対象集合の全ての変数について配置を決定したか否かを判定する（ステップＳ６）。
【０００７】
全ての変数について配置を決定した場合（ステップＳ６：Ｙ）は、処理を終了し、決定していない場合（ステップＳ６：Ｎ）、ステップＳ５の処理に戻る。
例えば、図４の変数対象表に示す変数の集合を配置対象集合とした場合には、コンパイラによって決定される変数のスタック領域における配置は、図１３に示す配置模式図ようになる。図１３は、各変数がサイズの小さい順（ａ，ｂ，ｃ，ｄの順）にスタック領域に配置されていることを示している。
【０００８】
ここで、図１３の各マス目で示す部分には、１バイトの変数が格納され、アドレスは、先頭のマス目を０番地、その右隣のマス目を１番地、そのまた右隣のマス目を２番地、先頭のマス目の下のマス目を８番地というように付与されているものとする。以下、後述する配置模式図についても同様とする。
図１３のスタック領域の空き領域の部分は、アラインメントの制約により、変数を配置できなかったスタック領域の空き領域を示している。例えば、変数ｂのアラインメントは４であるので、コンパイラはｂをａの隣のアドレスである１番地から配置することができず、４番地のアドレスから配置している。同様に、変数ｄは、１６番地のアドレスから配置している。
【０００９】
これにより、例えば、スタック領域に格納された変数に１命令でアクセス可能な範囲を３２バイトであるとすると、１命令で３つの型の異なる変数にアクセスすることが可能となる。
このように、サイズの小さい順にスタック領域における変数の配置を決定することにより、サイズの小さい変数の呼出頻度が高いプログラムにおいて、プログラムの実行速度を速めることができる。
【００１０】
又、従来法２として、変数のアラインメントの大きい順に、スタック領域における変数の配置の決定する方法がある。
図１４は、アラインメントが大きい順に従ってコンパイラが行うスタック領域における変数の配置の決定処理を示すフローチャートである。
コンパイラは、ソースプログラムを読出し（ステップＳ１１）、読み出したプログラムの構文解析の処理を実行し（ステップＳ１２）、解析した結果に基いて、スタック領域への配置対象となる変数対照表を作成し（ステップＳ１３）、変数対照表の各変数をスタック領域への配置対象集合の構成要素とし（ステップＳ１４）、配置対象集合からアラインメントが最大の変数を選択し、当該変数のスタック領域における配置を決定し（ステップＳ１５）、配置対象集合の全ての変数について配置を決定したか否かを判定する（ステップＳ１６）。
【００１１】
全ての変数について配置を決定した場合（ステップＳ１６：Ｙ）は、処理を終了し、決定していない場合（ステップＳ１６：Ｎ）、ステップＳ１５の処理に戻る。
例えば、図４の変数対照表に示す変数の集合を配置対象データ集合とした場合には、コンパイラによって決定される変数のスタック領域における配置は、図１５に示す配置模式図のようになる。図１５は、各変数がアラインメントの大きい順（ｄ，ｂ，ｃ，ａ（ｃとａの順は逆でもよい）の順）にスタック領域に配置されていることを示している。
【００１２】
図１５に示すように、この方法によると、コンパイラは、スタック領域に空き領域を生じさせることなく、各変数をスタック領域に配置することが可能となる。
このように、アラインメントの大きい順にスタック領域における変数の配置を決定することにより、メモリの無駄な使用をなくし、少ないメモリ容量で効率よく、変数をスタック領域に格納することができる。
【００１３】
【発明が解決しようとする課題】
しかしながら、従来法１によって、スタック領域における変数の配置を決定した場合には、スタック領域に無駄な空き領域が生じ、メモリ使用量が大きくなるという不具合が生じる。
又、従来法２によって、スタック領域における変数の配置を決定した場合には、サイズの大きい変数がスタック領域の先頭に配置されることがあり、１命令でアクセス可能な変数の数が少なくなり、アラインメントが小さい変数の呼出頻度が多いプログラムにおいて、プログラムの実行速度を低下させるという不具合が生じる。
【００１４】
そこで、本発明は、スタック領域における変数の配置の決定を最適化するコンパイラ装置及び配置決定方法を提供することを目的とする。
【００１５】
【課題を解決するための手段】
上記課題を解決するために本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置であって、複数のデータ属性を有する複数のデータの集合Ｘから、前記複数のデータ属性の何れかに基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択手段と、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定手段と、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定手段とを備え、前記配置決定データ選択手段は、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すことを特徴とする。
【００１６】
又、本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置におけるデータ配置方法であって、複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと、当該データの配置を前記記憶領域内に決定できない場合に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定ステップとを含み、前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すことを特徴とする。
【００１７】
又、本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置に用いられるプログラムであって、前記プログラムは、複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと、当該データの配置を前記記憶領域内に決定できない場合に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定ステップとを含み、前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すことを特徴とする。
【００１８】
又、本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラに用いられるプログラムを記録したコンピュータ読取可能な記録媒体であって、前記プログラムは、複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと当該データの配置を前記記憶領域内に決定できない場合に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、データ属性に基いて定めた第２基準に従って特定する除外データ特定ステップとを含み、前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すことを特徴とする。
【００１９】
【発明の実施の形態】
＜構成＞
図１は、本実施の形態におけるコンパイラ装置１００の構成を示す。コンパイラ装置１００は、ＣＰＵ１０１、表示部１０２、入力部１０３、記憶部１０４、から構成される。
【００２０】
ＣＰＵ１０１は、入力部１０３から入力されるユーザー指示に応じて、記憶部１０４に格納されているコンパイラプログラム２０４を実行することにより、コンパイルを行い、ソースプログラム２０５に含まれる変数のスタック領域における配置を決定し、ソースプログラム２０５のコードをオブジェクトプログラムのコード３０５に翻訳する。
【００２１】
具体的には、記憶部１０４からソースプログラム２０５を読出し、読み出したソースプログラム２０５の構文解析の処理を実行し、解析した結果に基いて、スタック領域への変数の配置決定処理を行い、オブジェクトプログラム３０５のコードを生成する。
なお、配置決定処理の詳細については後述する。
【００２２】
表示部１０２は、コンパイル処理の結果を表示する。
入力部１０３は、ユーザーからコンパイルの実行指示の入力を受付ける。
記憶部１０４は、コンパイラプログラム２０４とソースプログラム２０５を記憶している。又、コンパイルの実行によりソースプログラムを翻訳したオブジェクトプログラム３０５を記憶する。
【００２３】
図２は、ソースプログラム２０５の具体例を示す。図２には、ソースプログラム２０５の一部の例が示されている。図２の１０２〜２００は、関数ｆ（ｖｏｉｄ）を定義している部分であり、１１０〜１１３は当該関数の変数を宣言している部分である。この宣言部分の記述に基いて、図４に示すような変数対照表がＣＰＵ１０１の実行するコンパイル処理によって作成される。
＜動作＞
次にＣＰＵ１０１の行うスタック領域における変数の配置決定処理について説明する。図３は、上記配置決定処理を示すフローチャートである。以下、図３に示すフローチャートを参照して説明する。
【００２４】
ＣＰＵ１０１は、記憶部１０４からソースプログラム２０５を読出し、読み出したプログラムの構文解析の処理を実行し、解析した結果に基いて、変数対照表を作成し（ステップＳ１００２）、除外集合を空集合とし（ステップＳ１００３）、変数対照表に含まれる各変数から構成される配置対象集合を作成し（ステップＳ１００４）、配置対象集合からアラインメントが最大の変数を選択し（ステップＳ１００５）、当該変数のアラインメントに基いて、スタック領域の空き領域内の、当該変数を配置可能で配置がまだ未決定の領域において、当該変数のアドレスが最小となるように当該変数の配置を決定し（ステップＳ１００６）、配置を決定した変数を配置対象集合から除き（ステップＳ１００７）、配置を決定した変数を配置決定済集合の構成要素とし（ステップＳ１００８）、決定した配置が、スタック領域における先頭アドレスが示す領域から所定の範囲内の領域にあるか否かを判定する（ステップＳ１００９）。
【００２５】
所定の範囲内の領域に無い場合（ステップＳ１００９：Ｎ）、配置決定済集合からサイズが最大の変数（集合に含まれる変数が１つの場合は、当該変数）を特定し、特定した変数を配置決定済集合から除き、除外集合に加え（ステップＳ１０１０）、特定した変数を除く残りの配置決定済集合に含まれる各変数を配置対象集合に加え（ステップＳ１０１１）、ステップＳ１００５〜ステップＳ１００９の処理を繰り返す。
【００２６】
所定の範囲内の領域に有る場合（ステップＳ１００９：Ｙ）、配置対象集合に含まれる変数が無くなったか否かを判定する（ステップＳ１０１２）。
無くなっていない場合（ステップＳ１０１２：Ｎ）、ステップＳ１００５の処理に戻る。
無くなっている場合（ステップＳ１０１２：Ｙ）、除外集合に含まれる変数が有るか否かを判定する（ステップＳ１０１３）。
【００２７】
変数が有る場合（ステップＳ１０１３：Ｙ）、除外集合からサイズが最小の変数（除外集合に含まれる変数が１個の場合は、当該変数）を選択し（ステップＳ１０１４）、当該変数のアラインメント値に基いて、スタック領域の空き領域内の、当該変数を配置可能で、配置がまだ未決定の領域において、当該変数のアドレスが最小となるように当該変数の配置を決定し（ステップＳ１０１５）、配置を決定した当該変数を除外集合から除き（ステップＳ１０１６）、ステップＳ１０１３の処理に戻る。
【００２８】
変数が無い場合（ステップＳ１０１３：Ｎ）、処理を終了する。
具体例として図２の例を用いて説明すると、ＣＰＵ１０１は、主記憶部１０４から、図２に示すソースプログラムの一部を含むソースプログラムを読出し、読み出したプログラムの構文解析の処理を実行し、解析した結果に基いて、図４に示す変数の変数対照表を作成し（ステップＳ１００２）、当該変数対照表に含まれる各変数であるａ，ｂ，ｃ，ｄから構成される配置対象集合を作成し（ステップＳ１００４）、当該配置対象集合からアラインメントが最大の変数であるｄを取り出し（ステップＳ１００５）、変数ｄのアラインメント値が８であるので、スタック領域の空き領域内の、変数ｄを配置可能で配置がまだ未決定の領域（アドレスが８の倍数である領域）において、変数ｄを配置するアドレス（ここでは、スタック領域の各１バイト領域毎に、先頭から順に０番地、１番地、２番地というようにアドレスが付与されるものとする。）が最小となる０番地から変数ｄを配置することを決定し（ステップＳ１００６）、変数ｄを配置対象集合から除き（ステップＳ１００７）、変数ｄを配置決定済集合の構成要素とし（ステップＳ１００８）、決定した配置が、スタック領域における先頭アドレスが示す領域から所定の範囲内の領域（ここでは、先頭アドレス０番地から３１番地の示す３２バイトの領域を所定の範囲の領域とする。）にあるか否かを判定する（ステップＳ１００９）。この段階における変数ｄのスタック領域における配置を示す配置模式図を図５に示す。
【００２９】
変数ｄの配置は、アドレス０番地からであるので、ＣＰＵ１０１は、所定の範囲内の領域に有ると判定し（ステップＳ１００９：Ｙ）、配置対象集合に含まれる変数が無くなったか否かを判定する（ステップＳ１０１２）。
配置対象集合には、ａ，ｂ，ｃの３つの変数が残っているので、ＣＰＵ１０１は、無くなっていないと判定し（ステップＳ１０１２：Ｎ）、ステップＳ１００５において、アラインメントが最大である変数ｂを配置対象集合から選択し、変数ｂのアラインメントが４であるので、０番地から３１番地のスタック領域には、図５に示すように既に変数ｄが配置されているので、変数ｂを配置可能で配置が未決定の領域（アドレスが４の倍数である領域で、アドレスが３２番地以降のスタック領域）において、変数ｂを配置するアドレスが最小となる３２番地から変数ｂを配置することを決定し（ステップＳ１００６）、変数ｂを配置対象集合から除き（ステップＳ１００７）、変数ｂを配置決定済集合の構成要素とし（ステップＳ１００８）、決定した配置が、スタック領域における先頭アドレス０番地から３１番地の示す領域の範囲内にあるか否かを判定する（ステップＳ１００９）。この段階における変数ｄ，ｂのスタック領域における配置を示す配置模式図を図６に示す。
【００３０】
変数ｂの配置は、アドレス３２番地からであるので、ＣＰＵ１０１は、所定の範囲内の領域に無いと判定し（ステップＳ１００９：Ｎ）、変数ｂと変数ｄとから成る配置決定済集合からサイズが最大の変数ｄを特定し、特定した変数ｄを配置決定済集合から除き、除外集合に加え（ステップＳ１０１０）、特定した変数ｄを除く残りの配置決定済集合に含まれる変数ｂを配置対象集合に加え（ステップＳ１０１１）、ステップＳ１００５〜ステップＳ１００９及びステップＳ１０１２の処理を繰り返し、変数ｂ，ｃ，ａの順（ｃとａの順序は逆であってもよい。）に配置を決定し、変数ｂ，ｃ，ａを配置決定済集合の構成要素とする。
【００３１】
これにより、変数ｂ，ｃ，ａは、図７の配置模式図に示すようにスタック領域のアドレスが０番地から２３番地のスタック領域に配置されるので、ＣＰＵ１０１は、所定の範囲内の領域に有ると判定し（ステップＳ１００９：Ｙ）、さらに配置対象集合に含まれる変数が無くなったと判定し（ステップＳ１０１２：Ｙ）、除外集合に変数ｄが加えられているので、ステップＳ１０１３において、変数が有ると判定し（ステップＳ１０１３：Ｙ）、除外集合からサイズが最小の変数ｄ（この例では、除外集合には変数ｄのみが含まれているので、変数ｄが選択される。）を選択し（ステップＳ１０１４）、当該変数のアラインメントが８であるので、スタック領域の空き領域内の当該変数を配置可能な領域（２４番地以降の領域でアドレスが８の倍数の領域）において、変数ｄのアドレスが最小となる２４番地から変数ｄを配置することを決定し（ステップＳ１０１５）、変数ｄを除外集合から除き（ステップＳ１０１６）、さらに除外集合に含まれる変数が無いと判定し（ステップＳ１０１３：Ｎ）、配置決定処理を終了する。
【００３２】
これにより、変数ａ，ｂ，ｃ，ｄは、図８の配置模式図に示されるように配置されることになり、スタック領域に格納された変数に１命令でアクセス可能な範囲を例えば、３２バイトであるとすると、上記の例においては、１命令でソースプログラムに記述されている全ての変数にアクセスすることが可能となる。
図９は、上記の配置決定処理によって決定されたスタック領域の配置に変数ａ，ｂ，ｃ，ｄが配置された場合におけるオブジェクトプログラム例を示す。図９の２１０は、スタック領域の２３番地に格納されている変数ａをレジスタｒ０に格納する命令を示している。同様に、図９の２２０は、スタック領域の０番地に格納されている変数ｂをレジスタｒ０に格納する命令を、図９の２３０は、スタック領域の４番地に格納されている変数ｃをレジスタｒ０に格納する命令を、図９の２４０は、スタック領域の２４番地に格納されている変数ｄをレジスタｒ０に格納する命令をそれぞれ示している。
【００３３】
一方、図１０は、従来法１によって、図１１は、従来法２よって、それぞれ変数ａ，ｂ，ｃ，ｄがスタック領域に配置された場合におけるオブジェクトプログラム例を示す。
図１０では、スタック領域の０番地、４番地、８番地にそれぞれ格納されている変数ａ，ｂ，ｃをそれぞれレジスタｒ０に格納する命令３１０〜３３０は、１命令になっているが、図１０の３４０及び３５０に示すように、スタック領域の３２番地に格納されている変数ｄをレジスタｒ０に格納する命令が２命令になっており、命令コードのサイズも増加している。
【００３４】
同様に図１１では、ステック領域の０番地に格納されている変数ｄをレジスタｒ０に格納する命令４７０は１命令になっているが、図１１の４１０及び４２０、４３０及び４４０、４５０及び４６０に示すように、スタック領域に格納されている変数ａ，ｂ，ｃのそれぞれをレジスタｒ０に格納する各命令が２命令になっており、命令コードのサイズも増加している。
【００３５】
このように、本実施の形態における配置決定処理によって変数の配置を実行することにより、スタック領域の変数へのアクセスに要する命令数や命令のコードサイズを少なくすることができる。
＜補足＞
以上、本発明に係るコンパイラ装置について、実施の形態に基づいて説明したが、本発明はこれら実施の形態に限られないことは勿論である。即ち、
（１）本実施の形態においては、図３のステップＳ１００５において、アラインメントを基準として、配置対象集合から変数を選択することとしたが、他のデータ属性を基準としてもよい。例えば、図１６に示すように、変数対照表に各変数の参照頻度に関する情報を加え、参照頻度の多い順に変数を選択することとしてもよい。又、スタック領域に格納されている変数にアクセスするために、制約の少ない命令を使用可能か否か、或いはコードサイズの小さい命令を使用可能か否かを基準としてもよい。
【００３６】
同様に図３のステップＳ１０１０において、サイズを基準として、配置決定済集合から除外する変数を特定することとしたが、他のデータ属性を基準としてもよい。例えば、図１６に示すように、変数対照表に各変数の参照頻度に関する情報を加え、参照頻度の少ない順に変数を特定することとしてもよい。参照頻度に関する情報は、例えばソースプログラムの構文解析の結果に基いて作成したり、シュミレータを用いてソースプログラムを実行させた結果に基いて作成することができる。
【００３７】
又、スタック領域に格納されている変数にアクセスするために、制約の少ない命令を使用可能か否か、或いはコードサイズの小さい命令を使用可能か否かを基準としてもよい。
（２）同様に図３のステップ１０１３において、変数のデータサイズを基準にして、除外集合から変数を選択することとしたが、他のデータ属性を基準としてもよい。例えば、図１６に示すように、変数対照表に各変数の参照頻度に関する情報を加え、参照頻度の多い順に変数を選択することとしてもよい。
【００３８】
又、スタック領域に格納されている変数にアクセスするために、制約の少ない命令を使用可能か否か、或いはコードサイズの小さい命令を使用可能か否かを基準としてもよい。
（３）図３のフローチャートに示すスタック領域における変数の配置決定処理においては、除外集合に含まれる変数の配置決定をステップＳ１０１３〜ステップＳ１０１６に示す処理によって行うこととしたが、上記処理の代わりに除外集合に含まれる変数に対して、ステップＳ１００５〜ステップＳ１０１２に示す処理を繰返すことにより、所定の範囲のスタック領域毎に当該変数の配置決定を行うこととしてもよい。
【００３９】
例えば、上記処理によって、０番地から３１番地までの３２バイトのスタック領域内において最初に配置対象集合に含まれる各変数の配置を決定し、次に当該スタック領域内において配置を決定できなかった除外集合に含まれる変数に対して、３２番地から６３番地までの３２バイトのスタック領域内を割付対象領域として、各変数の配置を決定し、さらに６４番地から９５番地までの３２バイトのスタック領域内を割付対象領域として、同様の配置決定を繰返すというようにして、全ての変数に対して、配置が決定されるまで所定の範囲のスタック領域毎に配置決定を繰り返すこととしてもよい。
【００４０】
なお、除外集合に含まれる変数に対して配置決定を繰り返す領域は、上記のように同一サイズの領域毎とは限らず、スタック領域のオフセット境界（命令サイズ，レイテンシ，命令の組み合わせ等により決定される）によって分けられ，そのオフセット値が小さい領域から割付対象領域となる。
【００４１】
【発明の効果】
（１）本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置であって、複数のデータ属性を有する複数のデータの集合Ｘから、前記複数のデータ属性の何れかに基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択手段と、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定手段と当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定手段とを備え、前記配置決定データ選択手段は、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すことを特徴とする構成を備える。
【００４２】
（２）又、前記配置決定データ選択手段はさらに、前記処理の繰返しを終了した後、前記除外データ特定手段によって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、前記配置決定手段はさらに、前記配置決定データ選択手段によってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、前記除外データ特定手段は、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、前記配置決定データ選択手段は、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たな記憶領域内に入るように決定されるまで繰返し、前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、前記配置決定データ選択手段はさらに、再除外対象データについて、前記再選択処理を繰返し、前記配置決定手段はさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、前記除外データ特定手段はさらに、前記再配置決定処理により当該再除外対象データの配置を決定できない場合毎に、前記再除外対象特定処理を繰返すこととしてもよい。
【００４３】
（３）又、本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置におけるデータ配置方法であって、複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと当該データの配置を前記記憶領域内に決定できない場合に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定ステップとを含み、前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すこととしてもよい。
【００４４】
（４）又、前記配置決定データ選択ステップはさらに、前記処理の繰返しを終了した後、前記除外データ特定ステップによって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、前記配置決定ステップはさらに、前記配置決定データ選択ステップによってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、前記除外データ特定ステップは、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、前記配置決定データ選択ステップは、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たな記憶領域内に入るように決定されるまで繰返し、前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、前記配置決定データ選択ステップはさらに、再除外対象データについて、前記再選択処理を繰返し、前記配置決定ステップはさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、前記除外データ特定ステップはさらに、前記再配置決定処理により当該再除外対象データの配置を決定できない場合毎に、前記再除外対象特定処理を繰返すこととしてもよい。
【００４５】
（５）又、本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラ装置に用いられるプログラムであって、前記プログラムは、複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと、当該データの配置を前記記憶領域内に決定できない場合に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、前記複数のデータ属性の何れかに基いて定めた第２基準に従って特定する除外データ特定ステップとを含み、前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すこととしてもよい。
【００４６】
（６）又、前記配置決定データ選択ステップはさらに、前記処理の繰返しを終了した後、前記除外データ特定ステップによって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、前記配置決定ステップはさらに、前記配置決定データ選択ステップによってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、前記除外データ特定ステップは、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、前記配置決定データ選択ステップは、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たな記憶領域内に入るように決定されるまで繰返し、前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、前記配置決定データ選択ステップはさらに、再除外対象データについて、前記再選択処理を繰返し、前記配置決定ステップはさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、前記除外データ特定ステップはさらに、前記配置決定処理により当該再除外対象データの配置を決定できない場合毎に、再除外対象特定処理を繰返すこととしてもよい。
【００４７】
（７）又、本発明は、データの記憶領域内における位置を特定するための即値をｍビットで指定する命令を含む命令セットの命令コードを生成するコンパイラに用いられるプログラムを記録したコンピュータ読取可能な記録媒体であって、前記プログラムは、複数のデータ属性を有する複数のデータの集合Ｘから、データ属性に基づいて定めた第１基準に従って、順次配置を決定すべきデータを選択する配置決定データ選択ステップと、データが選択される毎に、選択されたデータのｎ（ｎ＜＝２ｍ）バイトの記憶領域内への配置の決定を試みる配置決定ステップと当該データの配置を前記記憶領域内に決定できない場合に、選択されたデータの中から除外対象となるデータを、前記第１基準とは異なる、データ属性に基いて定めた第２基準に従って特定する除外データ特定ステップとを含み、前記配置決定データ選択ステップは、前記データ集合Ｘから前記除外対象データを除いたデータの中から、前記第１基準に従って、順次配置を決定すべきデータを選択する処理を、除外対象データを除く前記データ集合Ｘの全てのデータの配置が前記記憶領域内に入るように決定されるまで繰返すこととしてもよい。
【００４８】
（８）又、前記配置決定データ選択ステップはさらに、前記処理の繰返しを終了した後、前記除外データ特定ステップによって特定された除外対象データの中から前記第１基準に従って、順次配置を決定すべきデータを再選択する再選択処理を行い、前記配置決定ステップはさらに、前記配置決定データ選択ステップによってデータが再選択される毎に新たな記憶領域内への当該データの配置を決定する再配置決定処理を行い、前記除外データ特定ステップは、当該データの配置を前記記憶領域内に決定できない場合毎に、選択されたデータの中から再除外対象となるデータを、前記第２基準に従って特定する再除外対象特定処理を行い、前記配置決定データ選択ステップは、前記除外対象データの中から前記再除外対象データを除いたデータ群について、前記再選択処理を、再除外対象データを除く前記除外対象データの全てのデータの配置が前記新たなの記憶領域内に入るように決定されるまで繰返し、前記再選択処理の繰返しを終了した後、配置未決定の再除外対象データが残っている場合に限り、前記配置決定データ選択ステップはさらに、再除外対象データについて、前記再選択処理を繰返し、前記配置決定ステップはさらに、配置を決定すべき再除外対象データが選択される毎に前記再配置決定処理を繰返し、前記除外データ特定ステップはさらに、前記配置決定処理により当該再除外対象データの配置を決定できない場合毎に、再除外対象特定処理を繰返すこととしてもよい。
【００４９】
これにより、所定サイズの記憶領域におけるデータの配置の決定を最適化することができる。
ここで、（１）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択手段は、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データのサイズの降順であり、前記除外データ特定手段は、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定することとしてもよい。
【００５０】
又、（１）の構成において、前記コンパイラはさらに、前記配置決定データ選択手段による前記処理の繰返しが終了後、前記除外データ特定手段によって特定された除外対象データの中からデータのサイズの昇順に従って、順次データを選択する再配置決定データ選択手段を備え、前記配置決定手段はさらに、前記再配置決定データ選択手段によってデータが選択される毎に当該データの前記記憶領域内への配置を決定することとしてもよい。
【００５１】
又、（２）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データのサイズの降順であることとしてもよい。
又、（３）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データのサイズの降順であり、前記除外データ特定ステップは、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定することとしてもよい。
【００５２】
又、（４）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データのサイズの降順であることとしてもよい。
又、（５）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データのサイズの降順であり、前記除外データ特定ステップは、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定することとしてもよい。
【００５３】
又、（６）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データのサイズの降順であることとしてもよい。
又、（７）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データのサイズの降順であり、前記除外データ特定ステップは、データのサイズの降順に、選択されたデータの中から除外対象となるデータを特定することとしてもよい。
【００５４】
又、（８）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データのサイズの降順であることとしてもよい。
これにより、所定サイズの記憶領域に無駄な空き領域を生じさせることなく、少ない命令数でできるだけ多くの種類のデータにアクセス可能となるように、データの記憶領域における配置を決定することができる。
【００５５】
ここで、（２）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データの参照頻度の昇順であることとしてもよい。
又、（１）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択手段は、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データの参照頻度の昇順であり、前記除外データ特定手段は、データの参照頻度の昇順に、選択されたデータの中から除外対象となるデータを特定することとしてもよい。
【００５６】
又、前記コンパイラはさらに、前記配置決定データ選択手段による前記処理の繰返しが終了後、特定された除外対象データの中からデータの参照頻度の降順に従って、順次データを選択する再配置決定データ選択手段を備え、前記配置決定手段はさらに、前記再配置決定データ選択手段によってデータが選択される毎に当該データの前記記憶領域内への配置を決定することとしてもよい。
【００５７】
又、（３）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データの参照頻度の昇順であり、前記除外データ特定ステップは、データの参照頻度の昇順に、選択されたデータの中から除外対象となるデータを特定することとしてもよい。
【００５８】
又、（４）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データの参照頻度の昇順であることとしてもよい。
又、（５）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データの参照頻度の昇順であり、前記除外データ特定ステップは、データの参照頻度の昇順に、選択されたデータの中から除外対象となるデータを特定することとしてもよい。
【００５９】
又、（６）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データの参照頻度の昇順であることとしてもよい。
又、（７）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記配置決定データ選択ステップは、アラインメントの降順に、前記集合Ｘから配置を決定すべきデータを選択し、前記第２基準は、データの参照頻度の昇順であり、前記除外データ特定ステップは、データの参照頻度の昇順に、選択されたデータの集合から除外対象となるデータを特定することとしてもよい。
【００６０】
又、（８）の構成において、前記第１基準は、データの前記記憶領域への配置の制約の大きさを示すアラインメントの降順であり、前記第２基準は、データの参照頻度の昇順であることとしてもよい。
これにより、所定サイズの記憶領域に無駄な空き領域を生じさせることなく、データの参照頻度を考慮した複数のデータの上記記憶領域内への配置が可能となるので、オブジェクトプログラムの実行効率を向上させることができる。
【図面の簡単な説明】
【図１】本実施の形態におけるコンパイラ装置１００の構成を示す。
【図２】ソースプログラム２０５の具体例を示す。
【図３】ＣＰＵ１０１の行うスタック領域における変数の配置決定処理を示す。
【図４】変数対照表の具体例を示す。
【図５】変数ｄのスタック領域における配置を示す配置模式図を示す。
【図６】変数ｄ，ｂのスタック領域における配置を示す配置模式図を示す。
【図７】変数ｂ，ｃ，ａのスタック領域における配置を示す配置模式図を示す。
【図８】変数ａ，ｂ，ｃ，ｄのスタック領域における配置を示す配置模式図を示す。
【図９】配置決定処理によって決定されたスタック領域の配置に変数ａ，ｂ，ｃ，ｄが配置された場合におけるオブジェクトプログラム例を示す。
【図１０】従来法１によって変数ａ，ｂ，ｃ，ｄがスタック領域に配置された場合におけるオブジェクトプログラム例を示す。
【図１１】従来法２によって変数ａ，ｂ，ｃ，ｄがスタック領域に配置された場合におけるオブジェクトプログラム例を示す。
【図１２】従来法１における、コンパイラによるスタック領域における変数の配置の決定処理を示すフローチャートである。
【図１３】従来法１によって決定されたスタック領域の配置に変数ａ，ｂ，ｃ，ｄが配置された場合における変数ａ，ｂ，ｃ，ｄのスタック領域における配置を示す配置模式図を示す。
【図１４】従来法２における、コンパイラによるスタック領域における変数の配置の決定処理を示すフローチャートである。
【図１５】従来法２によって決定されたスタック領域の配置に変数ａ，ｂ，ｃ，ｄが配置された場合における変数ａ，ｂ，ｃ，ｄのスタック領域における配置を示す配置模式図を示す。
【図１６】参照頻度に関する情報を含む変数対照表の具体例を示す。
【符号の説明】
１０１　　ＣＰＵ
１０２　表示部
１０３　　入力部
１０４　記憶部
２０４　コンパイラプログラム
２０５　ソースプログラム
３０５　オブジェクトプログラム
【図１】
2004070439.tif 000003
【図２】
2004070439.tif 000004
【図３】
2004070439.tif 000005
【図４】
2004070439.tif 000006
【図５】
2004070439.tif 000007
【図６】
2004070439.tif 000008
【図７】
2004070439.tif 000009
【図８】
2004070439.tif 000010
【図９】
2004070439.tif 000011
【図１０】
2004070439.tif 000012
【図１１】
2004070439.tif 000013
【図１２】
2004070439.tif 000014
【図１３】
2004070439.tif 000015
【図１４】
2004070439.tif 000016
【図１５】
2004070439.tif 000017
【図１６】
2004070439.tif 000018