(57)【要約】【課題】必要とされるメモリ容量を減少させることができるデータ配置方法、コンパイル装置及びプログラムを提供すること【解決手段】本発明にかかるデータ配置方法は、コンピュータによって実行されるコンパイルにおけるデータ配置方法であって、予め定められたサイズの元データを含むソースコードを読み込んで、当該元データをアライメントサイズの倍数のサイズを有する第１のデータとアライメントサイズ未満のサイズを有する第２のデータに分割するステップと、当該第１のデータを第１のテーブルとして記憶部に格納するステップと、当該第２のデータを第２のテーブルとして前記記憶部に格納するステップを有する。【選択図】図１
2010198164.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実行されるコンパイルにおけるデータ配置方法であって、
予め定められたサイズの元データを含むソースコードを読み込んで、当該元データをアライメントサイズの倍数のサイズを有する第１のデータとアライメントサイズ未満のサイズを有する第２のデータに分割するステップと、
当該第１のデータを第１のテーブルとして記憶部に格納するステップと、
当該第２のデータを第２のテーブルとして前記記憶部に格納するステップを有するデータ配置方法。
【請求項２】
前記データ配置方法は、さらに前記第１のテーブル及び前記第２のテーブルの構成を定義した情報であるテーブル情報を参照するステップを有し、
前記第１のテーブル及び前記第２のテーブルは、前記テーブル情報に基づいた構成で生成される請求項１に記載のデータ配置方法。
【請求項３】
前記テーブル情報は、記憶装置上に配置される前記第１のテーブル及び前記第２のテーブルのそれぞれの先頭位置を示す情報である先頭位置情報と、
前記第１のデータ及び前記第２のデータのそれぞれのサイズを示す情報であるサイズ情報と、
前記第１のテーブル又は前記第２のテーブルの先頭位置を基準とした前記第１のデータ又は前記第２のデータの番号を示す情報であるエントリ番号と当該第１のデータ及び当該第２のデータの分割前のデータのデータ名を対応づけた情報を有し、
前記データ配置方法は、さらに前記データ名を用いて記述されたデータを参照するコードを、前記先頭位置情報の示す先頭位置を基準として、当該データのデータ名に対応するエントリ番号と前記サイズ情報を用いて、当該データを分割した第１のデータ及び第２のデータが配置された前記記憶装置上の位置を求めて、当該第１のデータ及び当該第２のデータを参照するコードに置き換えるステップを有する請求項２に記載のデータ配置方法。
【請求項４】
コンピュータに、請求項１乃至３のいずれかに記載のデータ配置方法の各ステップを実行させるためのプログラム。
【請求項５】
予め定められたサイズの元データを含むソースコードをコンパイルするコンパイル装置であって、
当該元データをアライメントサイズの倍数のサイズを有する第１のデータとアライメントサイズ未満のサイズを有する第２のデータに分割する手段と、
当該第１のデータを第１のテーブルに格納する手段と、
当該第２のデータを第２のテーブルに格納する手段を有するコンパイル装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ配置方法、コンパイル装置及びプログラムに関する。
【背景技術】
【０００２】
近年のマイクロコンピュータ（以下、マイコン）の発展に伴い、マイコンは自動車や家電等にも搭載され、多種多様であり便利な機能の提供を実現している。
しかしながら、マイコン内部のレジスタ数やマイコンの保有する命令数が増えると、扱う情報量が増え、マイコンを制御するための実行プログラムのコードサイズが増加するため、実行プログラムを格納するために必要とするメモリの容量も大きくなる。
他方、必要とするメモリ容量を少なくしてコストダウンを図るために、実行プログラムを生成するコンパイラにより、生成する実行プログラムのコードサイズをより小さく抑えることが望まれている。
【０００３】
特許文献２には、オブジェクトコードのサイズの減少を図る発明として、目的プログラムにおける関数ラベルの前に複数の定数を配置して定数群を形成する技術が開示されている。
また、特許文献１、４には、定数を即値オペランドに分割して格納する技術が開示されている。
さらに、特許文献３には、アライメント条件に合わせて定数領域を割り付けることにより、メモリアクセスの効率を向上させる技術が開示されている。
【０００４】
ところで、例えば配列のような、複数のデータをまとめたデータ群を有するソースコードをコンパイラよってコンパイルし、実行プログラムを生成する場合には、図１５に示すようにデータが並べられて配置された実行プログラムが生成される（以下、このようなデータの並びをテーブルと呼ぶ）。図１５は、図の左下が最も下位のアドレスを示し、テーブルの先頭アドレスとなる。ここで、データ０、データ１、・・・、データＮは、それぞれサイズが４バイトのデータである。それぞれを下位のアドレスのデータから順番に、０、１、・・・、Ｎのエントリ番号によって表現する。
また、データｎ（ｎ＝０〜Ｎ）は、下記式（１）により算出されるアドレスを参照することによって得られる。
【０００５】
データｎのアドレス＝テーブル先頭アドレス＋エントリ番号（ｎ）×データのサイズ
・・・（１）
【０００６】
しかし、図１５のようなテーブルをコンパイラが生成するにあたり、テーブルを構成するデータのサイズと、マイコンもしくはＣＰＵ（Central Processing Unit）が保有するメモリ参照命令の特性によって、テーブル内の各データの間に、データを整列させるための領域が発生してしまうという問題がある。
例として、データ群のデータのサイズが３バイトであり、マイコンがメモリの参照命令として３バイト参照命令を保有せず、２バイト参照命令と１バイト参照命令を保有し、この２バイト参照命令は、２の倍数のアドレスからのみ参照可能である特性を有する場合について説明する。つまり、本例は、アライメントのサイズが２バイトの場合である。
【０００７】
かかる場合は、コンパイラにより、図１６に示すテーブルを構成し、図１７に示す命令によって、図１６に示すテーブルのデータを参照する実行プログラムが生成される。または、コンパイラの種類やコンパイル時に指定するオプションによっては、図１８に示すテーブルを構成し、図１９に示す命令によって、図１８に示すテーブルのデータを参照する実行プログラムが生成される場合もある。
【０００８】
図１６及び図１７に示す場合について図を参照しながら説明する。かかる場合は、２バイト参照命令と１バイト参照命令を１回ずつ実行することにより、テーブルのデータを参照する。
まず、図１７に示す各命令について順次説明する。図１７は、例として、テーブルのデータとして、所定のデータの格納先を示すアドレスが格納されており、このテーブルのデータを参照して取得し、取得したデータを利用して所定のデータを取得する命令が示されている。
【０００９】
１行目：エントリ番号をレジスタＢＣに格納する命令である。ここでは、参照するデータのエントリ番号が格納される。
【００１０】
２行目：レジスタＢＣに格納されている値を２ビット左シフトする命令である。この命令により、テーブル先頭アドレスから、１行目の命令で指定したエントリ番号のデータの先頭アドレスまでのオフセットが求まる。つまり、"テーブル先頭アドレス＋レジスタＢＣ"の値が参照するデータの先頭アドレスを示すこととなる。
【００１１】
３行目："テーブル先頭アドレス＋２＋レジスタＢＣ"の値が示すアドレスのデータを１バイト読み込み、レジスタＡに格納する命令である。つまり、"参照するデータの先頭アドレス＋２"の値が示すアドレスのデータを１バイト読み込むこととなり、データの３バイト目の１バイトを参照する命令となる。
【００１２】
４行目：レジスタＡに格納されている値をレジスタＥＳに格納する命令である。
【００１３】
５行目："テーブル先頭アドレス＋レジスタＢＣ"の値が示すアドレスのデータを２バイト読み込み、レジスタＡＸに格納する命令である。つまり、参照するデータの先頭アドレスから２バイト読み込むこととなり、データの１バイト目、２バイト目の２バイトを参照する命令となる。
【００１４】
６行目：レジスタＡＸに格納されている値をレジスタＤＥに格納する命令である。
【００１５】
７行目：レジスタＥＳを上位１バイト、レジスタＤＥを下位２バイトとした３バイトの値で示されるアドレスに格納されている所定のデータを２バイト読み込み、レジスタＡＸに格納する命令である。
【００１６】
しかし、２の倍数のアドレスからのみ参照可能である２バイト参照命令による読み込みを可能とするために、図１６に示すように、３バイトのデータＮ個に対して、データを整列させるための領域が１バイトずつ付加され、４バイトとＮを乗算したサイズのテーブルが生成される。
そのため、図１６及び図１７に示す場合には、必要とされるメモリ数が増大してしまうという問題がある。
【００１７】
続いて、図１８及び図１９に示す場合について図を参照しながら説明する。図１８に示されるテーブルは、データを整列させるための領域が付加されていないため、テーブルのサイズは３バイトとＮを乗算したサイズとなる。
しかし、テーブルのデータの先頭アドレスは常に２の倍数のアドレスにはならないため、図１９のように、１バイト参照命令を３回ずつ実行することにより、テーブルのデータを参照する命令が生成される。
図１９に示す各命令について順次説明する。ここでは例として、図１７に示す場合と同様に、テーブルのデータとして、所定のデータの格納先を示すアドレスが格納されており、このテーブルのデータを参照して取得し、取得したデータを利用して所定のデータを取得する命令が示されている。
【００１８】
１行目：エントリ番号をレジスタＢＣに格納する命令である。ここでは、参照するデータのエントリ番号が格納される。
【００１９】
２行目：レジスタＢＣに格納されている値をレジスタＡＸに格納する命令である。
３行目：レジスタＡＸに格納されている値にレジスタＢＣに格納されている値を加算する命令である。
４行目：レジスタＡＸに格納されている値にレジスタＢＣに格納されている値を加算する命令である。
５行目：レジスタＡＸに格納されている値をレジスタＢＣに格納する命令である。
２行目から５行目に示す命令により、テーブ先頭アドレスから、１行目で指定したエントリ番号のデータの先頭アドレスまでのオフセットが求まる。つまり、"テーブル先頭アドレス＋レジスタＢＣ"の値が参照するデータの先頭アドレスを示すこととなる。データのサイズが奇数バイトであるため、左シフトによる演算のみでオフセットをもとめることができないため、このような命令となる。
【００２０】
６行目："テーブル先頭アドレス＋２＋レジスタＢＣ"の値が示すアドレスのデータを１バイト読み込み、レジスタＡに格納する命令である。つまり、"参照するデータの先頭アドレス＋２"の値が示すアドレスのデータを１バイト読み込むこととなり、データの３バイト目の１バイトを参照する命令となる。
【００２１】
７行目：レジスタＡに格納されている値をレジスタＥＳに格納する命令である。
【００２２】
８行目："テーブル先頭アドレス＋レジスタＢＣ"の値が示すアドレスのデータを１バイト読み込み、レジスタＡに格納する命令である。つまり、参照するデータの先頭アドレスから１バイト読み込むこととなり、データの１バイト目の１バイトを参照する命令となる。
【００２３】
９行目：レジスタＡに格納されている値をレジスタＸに格納する命令である。
【００２４】
１０行目："テーブル先頭アドレス＋１＋レジスタＢＣ"の値が示すアドレスのデータを１バイト読み込み、レジスタＡに格納する命令である。つまり、"参照するデータの先頭アドレス＋１"の値が示すアドレスのデータを１バイト読み込むこととなり、データの２バイト目の１バイトを参照する命令となる。
【００２５】
１１行目：レジスタＡＸに格納されている値をレジスタＤＥに格納する命令である。ここで、レジスタＡＸには、レジスタＡを上位１バイト、レジスタＸを下位１バイトとした値が格納されている。
【００２６】
１２行目：レジスタＥＳを上位１バイト、レジスタＤＥを下位２バイトとした３バイトの値で示されるアドレスに格納されているデータを２バイト読み込み、レジスタＡＸに格納する命令である。
【００２７】
しかし、図１９では、図１７と比べて、命令数が増え、データを参照するコードサイズも大きくなってしまう。
そのため、図１８及び図１９に示す場合には、必要とされるメモリ数が増大し、データ参照速度も低下するという問題がある。
【先行技術文献】
【特許文献】
【００２８】
【特許文献１】特開２０００−０２９７１８号公報
【特許文献２】特開平０５−１７３８００号公報
【特許文献３】特開平０５−１９７５６５号公報
【特許文献４】特開平０８−００６７９７号公報
【発明の概要】
【発明が解決しようとする課題】
【００２９】
背景技術として説明したように、マイコンもしくはＣＰＵの保有するメモリ参照命令の特性によって、テーブル内の各データの間に、データを整列させるための領域が発生してしまい、必要とされるメモリ容量が増大してしまうという問題がある。
【課題を解決するための手段】
【００３０】
本発明にかかるデータ配置方法は、コンピュータによって実行されるコンパイルにおけるデータ配置方法であって、予め定められたサイズの元データを含むソースコードを読み込んで、当該元データをアライメントサイズの倍数のサイズを有する第１のデータとアライメントサイズ未満のサイズを有する第２のデータに分割するステップと、当該第１のデータを第１のテーブルとして記憶部に格納するステップと、当該第２のデータを第２のテーブルとして前記記憶部に格納するステップを有するものである。
【００３１】
これにより、アライメントサイズ単位にデータの区切りができるように、データをテーブルに格納することで、テーブル内の各データ間にデータを整列させるための領域が発生することを抑制することができ、必要とされるメモリ容量を減少させることができる。
【００３２】
本発明にかかるコンパイル装置は、予め定められたサイズの元データを含むソースコードをコンパイルするコンパイル装置であって、当該元データをアライメントサイズの倍数のサイズを有する第１のデータとアライメントサイズ未満のサイズを有する第２のデータに分割する手段と、当該第１のデータを第１のテーブルに格納する手段と、当該第２のデータを第２のテーブルに格納する手段を有するものである。
【００３３】
これにより、アライメントサイズ単位にデータの区切りができるように、データをテーブルに格納することで、テーブル内の各データ間にデータを整列させるための領域が発生することを抑制することができ、必要とされるメモリ容量を減少させることができる。
【発明の効果】
【００３４】
本発明により、必要とされるメモリ容量を減少させることができるデータ配置方法、コンパイル装置及びプログラムを提供することができる。
【図面の簡単な説明】
【００３５】
【図１】本発明の実施の形態１にかかるデータ配置方法のフローチャートである。
【図２】本発明を適用しなかった場合に生成されるテーブルを示す図である。
【図３】本発明を適用した場合に生成されるテーブル及び分割データテーブルを示す図である。
【図４】３バイトのサイズのデータに本発明を適用した場合に生成されるテーブル及び分割データテーブルを示す図である。
【図５】図４で示されるテーブルのデータを参照するアセンブラコードである。
【図６】５バイトのサイズのデータのテーブルを示す図である。
【図７】５バイトのサイズのデータに本発明を適用した場合に生成されるテーブル及び分割データテーブルを示す図である。
【図８】７バイトのサイズのデータのテーブルを示す図である。
【図９】７バイトのサイズのデータに本発明を適用した場合に生成されるテーブル及び分割データテーブルを示す図である。
【図１０】実行プログラム生成の機能ブロック図である。
【図１１】テーブル情報を示す図である。
【図１２】実行プログラム１及び実行プログラム２とテーブル領域の関係説明図である。
【図１３】３バイトのサイズの関数のアドレスのデータに本発明を適用した場合に生成されるテーブル及び分割データテーブルを示す図である。
【図１４】本発明を適用した場合におけるテーブル情報を示す図である。
【図１５】４バイトのサイズのデータのテーブルを示す図である。
【図１６】３バイトのサイズのデータのテーブルを示す図である。
【図１７】図１６で示されるテーブルのデータを参照するアセンブラコードである。
【図１８】図１６とは別事例の３バイトのサイズのデータのテーブルを示す図である。
【図１９】図１８で示されるテーブルのデータを参照するアセンブラコードである。
【発明を実施するための形態】
【００３６】
発明の実施の形態１．
図１のフローチャートを用いて、本発明の実施の形態１にかかるデータ配置方法について説明する。
また、データ群を有するソースコードをコンパイラよってコンパイルし、実行プログラムを生成するときに、本発明を適用しなかった場合に実行プログラム内に生成されるテーブルを図２に、本発明を適用した場合に実行プログラム内に生成されるテーブルを図３に示す。図２、図３のそれぞれのテーブルは、左下が最も下位のアドレスを示し、テーブルの先頭アドレスとなる。データを下位のアドレスのデータから順番に、０、１、・・・、Ｎのエントリ番号によって表現する。
【００３７】
まず、ソースコードに含まれるデータのうち、処理の対象となるデータをアライメントサイズの倍数のサイズのデータとアライメントサイズ未満のサイズのデータに分割する（Ｓ１０１）。ここで処理の対象となるデータは、背景技術として記載したようにデータのサイズがアライメントサイズの倍数とならず、コンパイルを行った場合に、データを整列させるための領域が発生してしまうサイズのデータ、もしくはデータを整列させるための領域が発生しないようにコンパイルを行ってもデータを参照するコードが大きくなってしまうデータである。なお、図２にlowで示される部分がアライメントサイズの倍数のサイズのデータとなり、highで示される部分がアライメントサイズ未満のサイズのデータとなる。
【００３８】
次に、アライメントサイズの倍数のサイズのデータをテーブルに格納する（Ｓ１０２）。図３（a）に示されるテーブルがこの処理ステップＳ１０２においてデータを格納するテーブルである。
次に、アライメントサイズ未満のサイズのデータをテーブルに格納する（Ｓ１０３）。図３（b）に示されるテーブルがこの処理ステップＳ１０３においてデータを格納するテーブルとなる分割データテーブルである。図３（b）に示されるように、アライメントサイズ単位にデータの区切りができるようにすることで、テーブル内の各データ間にデータを整列させるための領域の発生を抑制ことができる。
ここで、実行プログラムを生成する際に、これらのテーブルが格納される記憶装置は、記憶部に相当する。記憶装置は、例えば、メモリやＨＤＤ(Hard Disc Drive)等である。
【００３９】
なお、図３（b）は、high(データ０)及びhigh(データ１)の２つのデータを並べるとアライメントサイズとなるような例が示されているが、アライメントサイズ単位でデータの区切りができるように整列させることができる数であれば、本実施の形態において例示した数に限られない。
ここで、アライメントサイズの倍数のサイズのデータをテーブルに格納する処理ステップＳ１０２の前に、アライメントサイズ未満のサイズのデータをテーブルに格納する処理ステップＳ１０３を行う実施の形態としてもよい。
【００４０】
続いて、本実施の形態を背景技術に記載したデータのサイズが３バイトのデータ群に適用した場合について説明する。この３バイトのデータ群を有するソースコードをコンパイルする過程で、本実施の形態を適用することで、図４に示す複数のテーブルを構成し、図５に示す各命令によって図４に示すテーブルのデータを参照する実行プログラムが生成される。図４に示す複数のテーブルのそれぞれの左下が最も下位のアドレスを示し、それぞれのテーブルの先頭アドレスとなる。
【００４１】
図４に示すように、３バイトのデータのうち、アライメントサイズの倍数のサイズのデータであるlow（データ０）、...、low(データＮ)で示す下位２バイトと、アライメントサイズ未満のサイズのデータであるhigh（データ０）、...、high（データＮ）で示す上位１バイトに分割し、下位２バイトのデータから構成されるテーブルと、上位１バイトのデータから構成される分割データテーブルを構成する。
【００４２】
これにより、図１６と比べて、データを整列させるための領域の発生を抑制することができるため、テーブルのサイズを小さくすることができ、生成される実行プログラムのコードサイズを小さくすることができる。
なお、本実施の形態では、３バイトのデータのうち、下位２バイトをアライメントサイズの倍数のサイズのデータに、上位１バイトをアライメントサイズ未満のサイズのデータに分割したが、上位２バイトをアライメントサイズの倍数のサイズのデータに、下位１バイトをアライメントサイズ未満のサイズのデータに分割する実施の形態としてもよい。
【００４３】
ここで、データｎ（ｎ＝０〜Ｎ）の下位２バイトのデータは下記式（２）により、データｎの上位１バイトのデータは下記式（３）により算出されるアドレスを参照することによって得られる。
【００４４】
データｎの下位２バイトのデータのアドレス＝テーブル先頭アドレス＋エントリ番号（ｎ）×テーブルのデータのサイズ（２バイト）・・・（２）
データｎの上位１バイトのデータのアドレス＝分割データテーブル先頭アドレス＋エントリ番号（ｎ）×分割データテーブルのデータのサイズ（１バイト）・・・（３）
【００４５】
次に、図５に示す各命令について順次説明する。図５は、図１７に示す場合と同様に、テーブルのデータとして、所定のデータの格納先を示すアドレスが格納されており、このテーブルのデータを参照して取得し、取得したデータを利用して所定のデータを取得する命令が示されている。
【００４６】
１行目：エントリ番号をレジスタＢＣに格納する命令である。ここでは、参照するデータのエントリ番号が格納される。
【００４７】
２行目："分割データテーブル先頭アドレス＋レジスタＢＣ"の値が示すアドレスのデータを１バイト読み込み、レジスタＡに格納する命令である。つまり、分割データテーブルの参照するエントリ番号のデータを１バイト参照する命令となる。
【００４８】
３行目：レジスタＡに格納されている値をレジスタＥＳに格納する命令である。
【００４９】
４行目：レジスタＢＣに格納されている値を１ビット左シフトする命令である。この命令により、テーブル先頭アドレスから、１行目の命令で指定したエントリ番号のデータの先頭アドレスまでのオフセットが求まる。つまり、"テーブル先頭アドレス＋レジスタＢＣ"の値がテーブルの参照するエントリ番号のデータの先頭アドレスを示すこととなる。
【００５０】
５行目："テーブル先頭アドレス＋レジスタＢＣ"の値が示すアドレスのデータを２バイト読み込み、レジスタＡＸに格納する命令である。つまり、テーブルのデータを２バイト参照する命令となる。
【００５１】
６行目：レジスタＡＸに格納されている値をレジスタＤＥに格納する命令である。
【００５２】
７行目：レジスタＥＳを上位１バイト、レジスタＤＥを下位２バイトとした３バイトの値で示されるアドレスに格納されているデータを２バイト読み込み、レジスタＡＸに格納する命令である。
本発明を適用した場合は、上述のような命令となり、図１９と比べてデータを参照する命令数を減少させることができ、生成される実行プログラムのコードサイズも小さくすることができる。
【００５３】
なお、ソースコードに記述された分割前のデータを参照するコードを図５のような、テーブル及び分割データテーブルのデータを参照する命令のコードに置き換える処理は、コンパイル時において、高級言語のソースコードからアセンブラコードに生成するときに、図５に示すようなアセンブラコードを生成してもよく、アセンブラコードを機械語コードに翻訳するときに行ってもよく、プログラムを機械語に翻訳するコンパイルの過程であればどのようなタイミングで行ってもよい。
【００５４】
また、本実施の形態を適用した他の例として、データ群のデータのサイズが５バイトであり、マイコンもしくはＣＰＵがメモリの参照命令として、２バイト参照命令と１バイト参照命令を保有し、この２バイト参照命令は、２の倍数のアドレスからのみ参照可能である特性を有する場合について説明する。つまり、本例は、アライメントのサイズが２バイトの場合である。
【００５５】
本実施の形態を適用しない場合は、図６に示されるように、１バイトのデータを整列させるための領域が発生する。
これに本実施の形態を適用することで、図７に示されるテーブルを構成して、生成される実行プログラムのコードサイズを小さくすることができる。つまり、図７のように、アライメントサイズの倍数のサイズのデータをさらに分割して、それぞれアライメントサイズの倍数のサイズ毎に別々のテーブルを構成する実施の形態としてもよい。もちろん、図３(a)のように、アライメントサイズの倍数のサイズのデータを分割せず、一つのテーブルとしてもよい。
【００５６】
その他の本実施の形態を適用した例として、データ群のデータのサイズが７バイトであり、マイコンもしくはＣＰＵがメモリの参照命令として、４バイト参照命令と２バイト参照命令と１バイト参照命令を保有し、この４バイト参照命令は４の倍数のアドレスからのみ参照可能であり、この２バイト参照命令は２の倍数のアドレスからのみからのみ参照可能である特性を有する場合について説明する。
【００５７】
本実施の形態を適用しない場合は、図８に示されるように、１バイトのデータを整列させるための領域が発生する。
これに本実施の形態を適用することで、図９に示されるテーブルを構成して、実行プログラムのコードサイズを小さくすることができる。つまり、図９のように、７バイトのデータからアライメントサイズ未満のサイズのデータをさらに分割し、それぞれ別々のテーブルを構成する実施の形態としてもよい。
【００５８】
以上のように、本発明を適用することで、実行プログラムのコードサイズを減少させることができ、必要とされるメモリ容量を減少させることができる。
また、データを参照する命令数を減少させることができ、データ参照速度が低下するという問題も解決することができる。
【００５９】
なお、本実施の形態では、データ群を有するソースコードをコンパイルする過程で、データを分割する形態について記載したが、ソースコードをコンパイルする場合に、データを整列させるための領域が発生してしまうサイズのデータを、ソースコードにおいて、あらかじめアライメントサイズの倍数のサイズのデータと、アライメントサイズ未満のサイズのデータに分割して記述しておく実施の形態としてもよい。
【００６０】
発明の実施の形体２．
続いて、本発明の実施の形態２にかかるデータ配置方法について説明する。
コンパイラは図１０に示されるようにソースコードをコンパイルし、オブジェクトコードを生成する。生成されたオブジェクトコードは、１つ又は複数のライブラリを含むオブジェクトコードをリンカによる処理によってリンクし、実行プログラムを生成する。例えば、この処理を２回行うことにより、実行プログラム１と実行プロプログラム２の２つの実行プログラムが生成される。
【００６１】
ここで、実行プログラム１及び実行プログラム２は、２つの実行ファイルが揃って動作するものとし、お互いに関数の呼び出し、変数の参照が可能であるものとする。また、先に実行プログラム１を生成するものとする。
この場合、リンカによる処理によってオブジェクトコード２から実行プログラム２を生成するときに、実行プログラム１を参照することにより、実行プログラム１が保有する関数や変数のアドレスを知ることができる。しかしながら、実行プログラム１の生成時には、実行プログラム２は存在しないため、実行プログラム２の保有する関数や変数のアドレスを知ることができない。
【００６２】
しかし、かかる場合においても、図１０に示すように、図１１に示すテーブル情報を共有し、実行プログラム２を実行するときにテーブル情報に基づいた記憶装置上の固定されたアドレスに、実行プログラム２が保有する関数や変数のアドレスを格納したテーブルが配置されるように、実行プログラム２を生成することにより、実行プログラム１を生成するときに、図１１に示すテーブル情報を参照することで実行プログラム２が保有する関数もしくは変数のアドレスを知ることができる。
そのため、実行プログラム２よりも先に実行プログラム１を生成する場合においても、実行プログラム２の保有する関数を呼び出しや変数の参照を行う実行プログラム１を生成することができるようにすることができる。
【００６３】
ここで、図１１に示すテーブル情報に格納された各情報について説明する。
"テーブル先頭アドレス"には、実行プログラム２が実行されるときに、実行プログラム２に格納されたテーブルが記憶装置上に展開されるアドレスが格納される。
"エントリ数"には、エントリ番号の総数が格納される。例えば、エントリ番号０〜Ｎのデータが格納されるテーブルのテーブル情報である場合には、Ｎ＋１が格納される。
"データサイズ"には、テーブルに格納されるデータのサイズが格納される。
"エントリ番号０〜Ｎに対応する関数名"には、それぞれのエントリ番号に対応する関数名が格納される。
【００６４】
図１２に示すように、上述したテーブル情報を用いて、ソースコードに記述された関数ｎ（ｎ＝０〜Ｎ）の呼び出しを、実行プログラム２に格納されたテーブル内のソースコードに記述された関数名に対応するエントリ番号ｎのデータである関数ｎのアドレスを呼び出すコードに置き換えて実行プログラム１を生成することで、実行プログラム２の有する関数ｎを呼び出すことができる。
【００６５】
本実施の形態では、図１１に示すテーブル情報に換えて、図１４に示すテーブル情報を共有し、図１２に示される実行プログラム２のテーブル領域に格納されるテーブルに、本発明を適用することで、図１３に示すテーブル及び分割データテーブルが生成する。
なお、本実施の形態では、データのサイズが３バイトの関数のアドレスのデータ群に適用した場合について説明する。また、図１３に示すテーブル及び分割データテーブルの生成手順及び構成は、実施の形態１と同様であるため、説明を省略する。
【００６６】
次に、図１４に示すテーブル情報に格納された各情報について説明する。
"テーブル先頭アドレス"には、実行プログラム２が実行されるときに、実行プログラム２に格納されたテーブルが記憶装置上に展開されるアドレスが格納される。
"分割データテーブル先頭アドレス"は、実行プログラム２が実行されるときに、実行プログラム２に格納された分割データテーブルが記憶装置上に展開されるアドレスが格納される。
"エントリ数"には、エントリ番号の総数が格納される。例えば、エントリ番号０〜Ｎのデータが格納されるテーブルのテーブル情報である場合には、Ｎ＋１が格納される。
"分割されたそれぞれのデータサイズ"には、テーブル及び分割データテーブルのそれぞれに格納されるデータのサイズが格納される。
"エントリ番号０〜Ｎに対応する関数名"には、それぞれのエントリ番号に対応する関数名が格納される。
【００６７】
図１２の実行プログラム１のテキストセグメント内にある、実行プログラム２に含まれるテーブルを参照するコードは、ソースコード１のコンパイル時に、図１４に示されるテーブル情報に基づいて、図８に示されるようなコードに置き換えられる。
また、図１２の実行プログラム２のテーブル領域内にあるテーブル及び分割データテーブルは、コンパイラによるソースコード２のコンパイル時に、図１４に示されるテーブル情報に基づいた構成で生成される。
なお、図１４に示すテーブル情報は、例えば、コンパイラが動作するＰＣ（Personal computer）、サーバのような情報処理装置にファイルの形で格納し、コンパイル時にオプションによって、このファイルを指定する実施の形態としてもよい。
【００６８】
以上のように、本発明を適用することで、実施の形態１と同様に、実行プログラムのコードサイズを減少させることができ、必要とされるメモリ容量を減少させることができる。
また、データ参照速度が低下するという問題も解決することができる。
【００６９】
以上に説明した本発明にかかるデータ配置方法は、上述の実施の形態の機能を実現するプログラムを記憶した記憶媒体をシステムもしくは装置に供給し、システムあるいは装置の有するコンピュータ又はＣＰＵ、ＭＰＵがこのプログラムを実行することによって、構成することが可能である。
また、このプログラムは様々な種類の記憶媒体に格納することが可能であり、また、通信媒体を介して伝達されることが可能である。ここで、記憶媒体には、例えば、フレキシブルディスク、ハードディスク、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ＲＯＭカートリッジ、バッテリバックアップ付きＲＡＭメモリカートリッジ、フラッシュメモリカートリッジ、不揮発性ＲＡＭカートリッジを含む。また、通信媒体には、電話回線の有線通信媒体、マイクロ波回線の無線通信媒体を含み、インターネット（登録商標）も含まれる。
【００７０】
また、コンピュータが上述の実施の形態の機能を実現するプログラムを実行することにより、上述の実施の形態の機能が実現されるだけではなく、このプログラムの指示に基づき、コンピュータ上で稼動しているＯＳ（Operating System）もしくはアプリケーションソフトと共同して上述の実施の形態の機能が実現される場合も、発明の実施の形態に含まれる。
さらに、このプログラムの処理の全てもしくは一部がコンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットにより行われて上述の実施の形態の機能が実現される場合も、発明の実施の形態に含まれる。
【図１】
2010198164.tif 000003
【図２】
2010198164.tif 000004
【図３】
2010198164.tif 000005
【図４】
2010198164.tif 000006
【図５】
2010198164.tif 000007
【図６】
2010198164.tif 000008
【図７】
2010198164.tif 000009
【図８】
2010198164.tif 000010
【図９】
2010198164.tif 000011
【図１０】
2010198164.tif 000012
【図１１】
2010198164.tif 000013
【図１２】
2010198164.tif 000014
【図１３】
2010198164.tif 000015
【図１４】
2010198164.tif 000016
【図１５】
2010198164.tif 000017
【図１６】
2010198164.tif 000018
【図１７】
2010198164.tif 000019
【図１８】
2010198164.tif 000020
【図１９】
2010198164.tif 000021