(57)【要約】【課題】  構造体の変数配列によるメモリ使用量を低減し、１つの記憶領域に対して同時に複数のデータの取り扱いを可能とし、外部で定義されたデータの取り扱いも容易にする。【解決手段】  メモリに対して使用するエリアを設定し（８２）、メモリの全エリアにおけるある変数を使用するエリアを設定したときの余りのエリアを求め（８３，８４，８５）、余りのエリアに応じてメモリに対して他の変数の使用を許可し（８６）、メモリに対して書き込まれる関数に使用される変数の書き込み処理手順を決定し（８７）、書き込み処理手順に従って他の変数をある変数と合成し（８８）、合成された変数をある変数に対応するある変数として記述する（８９）ものである。【選択図】        図８
2005346272.tif 000002
【特許請求の範囲】
【請求項１】
ある関数を構成する際にいくつかの変数を用いる構造体型配列のデータのメモリ使用方法において、
上記メモリに対して使用するエリアを設定し、
上記メモリの全エリアにおけるある変数を使用するエリアを設定したときの余りのエリアを求め、
上記余りのエリアに応じて上記メモリに対して他の変数の使用を許可し、
上記メモリに対して書き込まれる関数に使用される変数の書き込み処理手順を決定し、
上記書き込み処理手順に従って上記他の変数をある変数と合成し、
上記合成された変数を上記ある変数に対応するある変数として記述する
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項２】
請求項１記載の構造体型配列のデータのメモリ使用方法において、
上記関数の上記ある変数は、unsigned型である
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項３】
請求項１記載の構造体型配列のデータのメモリ使用方法において、
上記関数はＣ言語により記述されるものである
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項４】
請求項１記載の構造体型配列のデータのメモリ使用方法において、
上記関数は使用ビット数が決められている特有のデータに適用されるものである
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項５】
請求項１記載の構造体型配列のデータのメモリ使用方法において、
上記書き込み処理手順は書き込み関数及び演算の手順である
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項６】
ある関数を構成する際にいくつかの変数を用いる構造体型配列のデータのメモリ使用方法において、
上記メモリに対して使用するエリアを設定し、
上記メモリの全エリアにおけるある変数を使用するエリアを設定したときの余りのエリアを求め、
上記余りのエリアに応じて上記メモリに対して他の変数の使用を許可し、
上記メモリに対して上記他の変数がある変数と合成して書き込まれる関数に使用される変数の読み出し処理手順を決定し、
上記読み出し処理手順に従って上記他の変数をある変数から分離し、
上記分離された上記他の変数を上記ある変数に対応するある変数として記述する
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項７】
請求項６記載の構造体型配列のデータのメモリ使用方法において、
上記関数の上記ある変数は、unsigned型である
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項８】
請求項６記載の構造体型配列のデータのメモリ使用方法において、
上記関数はＣ言語により記述されるものである
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項９】
請求項６記載の構造体型配列のデータのメモリ使用方法において、
上記関数は使用ビット数が決められている特有のデータに適用されるものである
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【請求項１０】
請求項６記載の構造体型配列のデータのメモリ使用方法において、
上記読み出し処理手順は書き込み関数及び演算の手順である
ことを特徴とする構造体型配列のデータのメモリ使用方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、Ｃ言語などのプログラムデータに使用される構造体型配列のデータのメモリ使用方法に関する。
【０００２】
具体的には、Ｃ言語などのプログラムデータに使用される構造体型の配列においてunsigned型データをアクセスする際のメモリ使用量を削減するものである。ソフトウェアによる信号処理を行うデジタル家電などの、処理系に依存しないソフトウェアの流用性を重視する分野に関する。
【背景技術】
【０００３】
構造体型の配列の場合、従来の手法では図９に示すように構造体型の宣言９１による１つの変数を示すメンバ９２，９３，９４，９５，９６，９７に対し１つのデータ９８を割り当てるようにしていた。従って、構造体に含まれるデータ数が増えるほどメモリ使用量が増加することとなる。
【０００４】
また、従来の技術の構造体型の配列のメモリ使用装置の例を図１０に示す。図１０において、従来のメモリ使用装置１０２は、制御手段１０１及び図示しないプログラムにより制御され、構造体型のメンバ９２，９３，９４，９５，９６，９７を記憶するメモリ１０３と、構造体型のメンバ９２，９３，９４，９５，９６，９７を読み出して保持するレジスタ１０４と、構造体型のメンバ９２，９３，９４，９５，９６，９７及びこれらを割り当てたデータ９８を記憶するメモリ１０５を備えていた。
【０００５】
また、図１１に示すように、１つの変数の何ビットを使うかを決めるビットフィールドを用いた場合、構造体型の宣言１１１による変数１１２，１１３，１１４，１１５をビット単位で取り扱うことができるので１つの変数で複数のデータをパックしてメモリ１１６に記憶することができるが、この場合は処理系によってデータの取り扱われ方が大きく異なってしまう。
【０００６】
図１２に示すように、構造体型の宣言１２１による変数１２２，１２３，１２４，１２５をビット単位で割り当てたフィールドがメモリ１２６内の右から左に割り当てられるのか、左から右へ割り当てられるのかは処理系のコンパイラによって異なる。
【０００７】
また、図１３に示すように、構造体型の宣言１３１による変数１３２，１３３，１３４，１３５，１３６をビット単位で割り当てたフィールドがメモリ１３７内に記憶する際に、１３８で示すように、このビットフィールドの設定が変数の境界にまたがることが許されるかどうかも処理系によって異なる。そのため、ビットフィールドを用いる方法は、もともとビットフィールドの外部で定義されたデータを取り扱う使い方には向いていないものであった。
【０００８】
また、図１４に示すように、構造体型の宣言１４１による変数１４２，１４３，１４４，１４５として共用体を用いた場合では、１つの記憶領域で異なった型をもつ変数データを取り扱うことができる。このため、１４６に示すように任意の組み合わせが可能となり、１４７に示すように保持できるデータは１つだけなのでシーケンシャルなアクセスが可能となる。
【０００９】
しかし、同時に１つの記憶領域に異なった複数のデータを共有させることはできない。このため、１４８に示すように非排他的となり、１４９に示すように同時に異なる２つのデータを書き込むと、最後に書き込んだデータのみが保持されるので、はじめのデータは残らないことになる。
【００１０】
構造体からデータを読み出す場合の従来手法のフローチャートを図１５に示す。構造体へデータを書き込む場合の従来手法のフローチャートを図１６へ示す。フローチャートのそれぞれの動作について説明する。
【００１１】
読み出し時には、図１５において、構造体のメンバから読み出すデータをメモリからレジスタにロードする（Ｆ４１）。
次に、レジスタから、読み出したデータを保持するメモリ上の変数にストアする（Ｆ４２）。
【００１２】
また、書き込み時には、図１６において、構造体のメンバへ書き込むデータをメモリからレジスタにロードする（Ｆ５１）。
次に、レジスタから、書き込むデータをメモリ上の構造体のメンバへストアする（Ｆ５２）。
【００１３】
従来のC言語によるプログラム例を下記に示す。下記の数１のような構造体が宣言されているとする。
【００１４】
［数１］
typedef struct {
unsigned int  data_a;
char          data_b;
} STRUCT_DATA;
【００１５】
数１は、構造体の宣言として、符号ビットのない整数型のデータａと、符号のあるデータｂとがSTRUCT_DATAの名前が付けられていることを示している。
さらに構造体が下記の数２のような配列として宣言されているとする。
【００１６】
［数２］
STRUCT_DATA tmp_data[120];
【００１７】
数２は、STRUCT_DATAの数として１２０ビットの実際の記憶領域を確保することを示している。
ここで、読み出し処理時には、下記の数３のような読み出し動作を行う。
【００１８】
［数３］
void read_data(STRUCT_DATA *s_data, short index, unsigned int*read_a, char *read_b){
*read_a = s_data[index]->data_a;
*read_b = s_data[index]->data_b;
return;
}
【００１９】
数３は、STRUCT_DATAとして、ポインタのアドレスで示されるデータａとデータｂを読み出す動作を示している。
また、書き込み処理時には、下記の数４のような書き込み動作を行う。
【００２０】
［数４］
void write_data(STRUCT_DATA *s_data, short index, unsigned intwrite_a, char write_b){
s_data[index]->data_a = write_a;
s_data[index]->data_b = write_b;
return;
}
【００２１】
数４は、STRUCT_DATAとして、ポインタのアドレスで示されるデータａとデータｂを書き込む動作を示している。
なお、一般的なメモリの使用方法として、本出願人による特許文献１に示す技術がある。
【特許文献１】特開平０８−２７２６５７号公報
【発明の開示】
【発明が解決しようとする課題】
【００２２】
上述した従来の手法では、構造体の変数を示すメンバが多いほど配列のメモリ使用量が大きくなるという不都合があった。また、共用体を用いた場合では、１つの記憶領域に対して同時に複数のデータを取り扱うことができないという不都合があった。また、ビットフィールドを用いた場合では、データの取り扱われ方が処理系に依存するため外部で定義されたデータの取り扱いには向かないという不都合があった。
【００２３】
そこで、本発明は、構造体の変数配列によるメモリ使用量を低減し、１つの記憶領域に対して同時に複数のデータの取り扱いを可能とし、外部で定義されたデータの取り扱いも容易にすることができる構造体型配列のデータのメモリ使用方法の提供を目的とするものである。
【課題を解決するための手段】
【００２４】
上記課題を解決し、本発明の目的を達成するため、本発明の構造体型配列のデータのメモリ使用方法は、メモリに対して使用するエリアを設定し、メモリの全エリアにおけるある変数を使用するエリアを設定したときの余りのエリアを求め、余りのエリアに応じてメモリに対して他の変数の使用を許可し、メモリに対して書き込まれる関数に使用される変数の書き込み処理手順を決定し、書き込み処理手順に従って他の変数をある変数と合成し、合成された変数をある変数に対応するある変数として記述するものである。
【００２５】
また、本発明の構造体型配列のデータのメモリ使用方法は、メモリに対して使用するエリアを設定し、メモリの全エリアにおけるある変数を使用するエリアを設定したときの余りのエリアを求め、余りのエリアに応じてメモリに対して他の変数の使用を許可し、メモリに対して他の変数がある変数と合成して書き込まれる関数に使用される変数の読み出し処理手順を決定し、読み出し処理手順に従って他の変数をある変数から分離し、分離された他の変数をある変数に対応するある変数として記述するものである。
【００２６】
このように本発明では、図１に示すように、構造体型の宣言１による構造体の変数を示すあるメンバ２，３，４に対して実際に使用されるデータの範囲５を示すデータ量に注目し、宣言されたメンバ２，３，４のデータ型の許容範囲（０〜３１ビット）に対して実際に使用されるビット６（０〜２１ビット）がどこまで使用されるのかを予め算出しておき、そのメンバの空き容量となる未使用のビット７（２２〜３１ビット）に他のメンバのデータ８（０〜８ビット）を割り当てることで、１つのメンバ１３に対して複数のデータ９，１０を共存させるものである。
【００２７】
例えば、メンバがunsigned型である場合の構造体のデータのアクセスにおいて、メンバの最上位ビットから下位方向への一定ビットが常に未使用であることが予め分かっている場合に、処理系がビッグとリトルのどちらのエンディアンであるかにかかわらず、そのメンバの未使用ビットを同時に別のデータに割り当てることで構造体のメモリ使用量を削減することができる。
また、構造体の配列を複数の変数を用いるように宣言した場合において、構造体のメモリ使用量を削減することができる。
【００２８】
また、構造体にアクセスする場合において、メンバの未使用の上位ビットに割り当てられた特定サイズのデータAの読み出し方、また同メンバから残りのデータBの読み出し方、または、メンバの未使用の上位ビットに割り当てられた特定サイズのデータAへの書き込み方、また同メンバの残りのデータBへの書き込み方、を行う手順を決めることにより、構造体のメモリ使用量を削減するものである。
【発明の効果】
【００２９】
本発明によれば、取り扱うデータ量はそのまま維持した状態でメモリ使用量を従来手法に対して削減することができる。また、共有体とは異なり複数の独立したデータを１つの記憶領域で独立して取り扱うことができ、また、ビットフィールドように処理系に依存しないため外部で定義されたデータの取り扱いも容易である。
【００３０】
例えば、unsigned int型メンバとchar（もしくはunsigned char）型メンバを一まとめにした場合、その配列の数が1024個であったならばメモリ使用量を1kbyte削減することができる。unsigned int型メンバとunsigned short型メンバを一まとめにした場合は、配列の数が1024個であったらならばメモリ使用量を2kbyte削減することができる。
【発明を実施するための最良の形態】
【００３１】
本発明は、構造体型の配列において、unsigned型データにアクセスする際に１つのメンバに複数のデータを共存させることでメモリの使用量を削減する手法に関するものである。
【００３２】
図２に示すように、32bitCPUの場合、構造体のメンバの型宣言をunsigned int型２１とした場合、取り扱えるデータ量２２は0〜4294967295であるが、実際に取り扱うデータ量２３が例えば0〜16777215までであるなら、8ビットが未使用２４であり空いていることになる。
【００３３】
この空いているビットフィールド２４で取り扱うことができる範囲のデータが、同じ構造体の他のメンバで使用している場合に１つのメンバで２つのデータを共存させることができる。
【００３４】
本発明はunsigned型のデータに対してのみ適用されるものである。従って、他のsigned型もしくは浮動小数点型のデータに対しては適用することはできないものである。
【００３５】
本発明のデータ読み出し時のフローチャートを図４に示す。同じくデータ書き込み時のフローチャートを図５に示す。またデータをパックする際のフローチャートを図６に示す。フローチャートのそれぞれの動作について説明する。
【００３６】
まず、データ読み出し時には、図４において、読み出す構造体のunsigned int型のメンバをメモリからレジスタAにロードする（Ｆ１）。
次に、読み出すのはデータAかデータCかを判別する（Ｆ２）。
ここで、読み出すのがデータAであった場合、メンバの下位24bitを読み出すために、0x00FFFFFFでマスクする（Ｆ３）。
次に、マスクしたデータをレジスタBへストアする（Ｆ４）。
そして、レジスタBのデータをメモリへストアする（Ｆ５）。
【００３７】
また、読み出すのがデータCであった場合、メンバの上位8bitを読み出すために、0xFF000000でマスクして15bit右シフトする（Ｆ６）。
次に、マスクしたデータをレジスタBへストアする（Ｆ７）。
そして、レジスタBのデータをメモリへストアする（Ｆ８）。
これで、データ読み出しを終了する（Ｆ９）。
【００３８】
次に、データ書き込み時には、図５において、書き込む構造体のunsigned int型のメンバをメモリからレジスタAにロードする（Ｆ１１）。
次に、書き込むデータをメモリからレジスタBへロードする（Ｆ１２）。
書き込むはデータAかデータCかを判別する（Ｆ１３）。
【００３９】
ここで、書き込むのがデータAであった場合、データCをバックアップのために取り出しておく（Ｆ１４）。ここでは0xFF000000でマスクしたものをレジスタCにロードする。
いったん、書き込むデータを0x00FFFFFFでマスクしてレジスタAにストアする（Ｆ１５）。
次に、バックアップのレジスタCのデータCをレジスタAに1bitごとの論理ORによってストアする（Ｆ１６）。
そして、レジスタCのデータをメモリへストアする（Ｆ１７）。
【００４０】
また、書き込むのがデータCであった場合、データAをバックアップのために取り出しておく（Ｆ１８）。ここでは0x00FFFFFFでマスクしたものをレジスタCへロードする。
いったん、書き込むデータを0xFF000000でマスクしてレジスタAにストアする（Ｆ１９）。
次に、バックアップのレジスタCのデータAをレジスタAに1bitごとの論理ORによってストアする（Ｆ２０）。
そして、レジスタCのデータをメモリへストアする（Ｆ２１）。
これで、データ書き込みを終了する（Ｆ２２）。
【００４１】
次に、データパック時には、図６において、データAとデータBをパックする構造体の該当するメンバをメモリからレジスタにロードする（Ｆ３１）。
まず、パックする構造体の該当するメンバを0で初期化しておく（Ｆ３２）。
次に、該当するメンバへ書き込むデータAをメモリからレジスタへロードする（Ｆ３３）。
また、該当するメンバへ書き込むデータBをメモリからレジスタへロードする（Ｆ３４）。
【００４２】
ここで、データBは予めデータAのサイズ分だけ左シフトしておき、その次にデータAとデータBを1bitごとの論理ORによってパックしてレジスタへ保持する（Ｆ３５）。
そして、パックしたデータをレジスタから、該当する構造体のメンバのメモリ上の記憶領域へストアする（Ｆ３６）。
上述した各処理を構造体の全ての配列にパックするまで繰り返す（Ｆ３７）。
これで、データパックを終了する（Ｆ３８）。
【００４３】
本発明によるC言語によるプログラム例を下記に示す。下記の数５のような構造体が宣言されているとする。
【００４４】
［数５］
typedef struct {
unsigned int  data_a;
int            data_b;
char           data_c;
} STRUCT_DATA;
【００４５】
数５は、構造体の宣言として、符号ビットのない整数型のデータａと、符号のあるデータｂと、符号のあるデータｃがSTRUCT_DATAの名前が付けられていることを示している。本発明では、「char       data_c;」によるデータｃの記述がいらなくなる。
さらに構造体が下記の数６のような配列として宣言されているとする。
【００４６】
［数６］
STRUCT_DATA tmp_data[120];
【００４７】
数６は、STRUCT_DATAの数として１２０ビットの実際の記憶領域を確保することを示している。
このとき、構造体のメンバdata_aには、0〜16777215までのデータ（データAと呼ぶ）をアクセスすることが事前に分かっており、また同様にdata_cには0〜100までのデータ（データCと呼ぶ）がアクセスされることが分かっているとする。このとき、図２に示すような、パック（合成）された記憶領域の読み出し/書き込み処理と、data_aにデータAとデータCを共存させるためのパック処理のプログラム例を示す。
【００４８】
また、図２はunsigned int型データとchar型データを共存させる際の取り扱えるデータ量を示しているが、他の場合として、図３に示すように、unsigned int型データ３１とshort型/unsigned short型データ３３の共存、unsigned short型データ３５とchar型/unsigned char型データ３７の共存などにより更なるメモリ削減効果がある。
ここで、読み出し処理時には、下記の数７のような読み出し動作を行う。
【００４９】
［数７］
void read_data(STRUCT_DATA *s_data, short index, char size_l, char sw, unsigned int *read){
/*
*s_data              ：データを保持する構造体の配列を示す。
index         ：読み出す配列のインデックスを示す。
size_l        ：データA（大きい方のデータ）のサイズを示し、bit単位を示す。
sw            ：データA/Cの読み出し元の指定を示す。
*read         ：読み出したデータを保持する変数のポインタを示す。
*/
unsigned int tmp_data=0;
/* メンバの読み出し */
tmp_data = s_data[index]->data_a;
/* 読み出すデータを判別 */
/* データAを読み出す場合 */
if(sw == DATA_A){
/* データAのみをデータAのサイズに応じて読み出す*/
*read = tmp_data & (0xffffffff << size_l)~;
}
/* データCを読み出す場合 */
if(sw == DATA_C){
/* 上位byteをsize_l分右へシフトして読み出し */
*read = tmp_data >> size_l;
}
return;
}
【００５０】
数７は、STRUCT_DATAとして、ポインタのアドレスで示される合成されて記憶されているデータａとデータｃを読み出す動作を示している。
次に、書き込み処理時には、下記の数８のような書き込み動作を行う。
【００５１】
［数８］
void write_data(STRUCT_DATA *s_data, short index, char size_l, char sw, unsigned int write){
/*
*s_data              ：データを保持する構造体の配列を示す。
index         ：書き込む配列のインデックスを示す。
size_l        ：データA（大きい方のデータ）のサイズを示し、bit単位を示す。
sw            ：データA/Cへの書き込み先の指定を示す。
write         ：書き込むデータの変数を示す。
*/
unsigned int tmp_data_a, tmp_data_c = 0;
/* 書き込み先の判別 */
/* データAに書き込む場合 */
if(sw == DATA_A){
/* データCのバックアップ */
tmp_data_c = (s_data[index]->data_a) & ((0xffffffff >> size_l) << size_l);
/* 書き込むデータを一時的な変数へコピー */
tmp_data_a = write & (0xffffffff << size_l)~;
/* データCを戻す */
tmp_data_a = tmp_data_a | tmp_data_c;
}
/* データCに書き込む場合 */
if(sw == DATA_C){
/* データAのバックアップ */
tmp_data_a = (s_data[index]->data_a) & (0xffffffff << size_l)~;
/* 書き込むデータを一時的な変数へコピー */
tmp_data_c = write & ((0xffffffff >> size_l);
tmp_data_c = tmp_data_c<< size_l;
/* データAを戻す */
tmp_data_a = tmp_data_a | tmp_data_c;
}
/* データA, Cの書き込み */
s_data[index]->data_a = tmp_data_a;
return;
}
【００５２】
数８は、STRUCT_DATAとして、ポインタのアドレスで示されるデータａとデータｃを合成して書き込む動作を示している。
次に、パック処理時には、下記の数９のようなパック動作を行う。
【００５３】
［数９］
void pack_data(STRUCT_DATA *s_data, int count, char size_l, unsigned int *write_a, unsigned int *write_b){
/*
*s_data              ：データを保持する構造体の配列を示す。
counter              ：構造体の配列の個数を示す。
size_l        ：データA（大きい方のデータ）のサイズを示し、bit単位を示す。
*write_a             :データAに書き込むデータの配列を示す。
*write_c             ：データC書き込むデータの配列を示す。
*/
unsigned int tmp_data_a, tmp_data_c = 0;
int c = 0;
/* 構造体の初期化 */
for(c = 0; c < count; c++){
s_data[c]->data_a = 0;
}
/* データAへの書き込み */
for(c = 0; c < count; c++){
/* 書き込むwrite_aを一時的な変数へコピー */
tmp_data_a = write_a[c] & (0xffffffff << size_l)~;
/* 書き込むwrite_bを一時的な変数へコピー */
tmp_data_c = write_b[c] & ((0xffffffff >> size_l);
tmp_data_c = tmp_data_c<< size_l;
/* data_a, data_cのパック */
tmp_data_a = tmp_data_a | tmp_data_c;
/* 実際の書き込み */
s_data[c]->data_a= tmp_data_a;
}
return;
}
【００５４】
数９は、STRUCT_DATAとして、ポインタのアドレスで示されるデータａとデータｂをパック（合成）する動作を示している。
【００５５】
図７に、構造体型配列のメモリ使用量削減装置の構成例を示す。
図７において、オーディオコーデックＩＣ７３は、メモリ使用量削減部７４及びオーディオコーデック部８０とを備えている。メモリ使用量削減部７４は、制御手段７２及びプログラム７１により制御され、構造体型のあるメンバを記憶するメモリ７５と、構造体型のあるメンバを使用する領域に対して他のメンバを使用する領域があるか否かを判別する判別手段７６と、構造体型のあるメンバと他のメンバを読み出して保持するレジスタ７７と、構造体型のあるメンバ及び他のメンバを合成する演算手段７８と、合成したメンバをあるメンバとして記憶するメモリ７９を備えている。
【００５６】
ここで、オーディオコーデック部８０は、Ａ／Ｄ変換器のダイナミックレンジが決まっているため、このダイナミックレンジ以上のビット数のオーディオデータを使用しないように構成されている。
【００５７】
そこで、オーディオコーデック部８０におけるオーディオデータのエンコード及びデコード処理においてメモリを使用する際に、メモリ使用量削減部７４により、あるデータに対して未使用の領域に他のデータを使用するようにあるデータと他のデータを合成してあるデータとして処理することにより、メモリの使用量を削減することができる。
【００５８】
図８は、メモリ使用量削減部７４の機能を示すブロック図である。
図８において、メモリ使用量削減部７４に対して通常のＣ言語による記述８１がされると、メモリ使用量削減部７４は、まず、８２に示すようにメモリに対して使用するエリアを設定し、８３，８４，８５に示すようにメモリの全エリアにおけるある変数を使用するエリアを設定したときの余りのエリアを求める。
【００５９】
次に、メモリ使用量削減部７４は、８６に示すように余りのエリアに応じてメモリに対して他の変数の使用を許可し、８７に示すようにメモリに対して書き込まれる関数に使用される変数の書き込み処理手順を決定する。
【００６０】
そこで、メモリ使用量削減部７４は、８８に示すように書き込み処理手順に従って他の変数をある変数と合成し、８９に示すように合成された変数をある変数に対応するある変数として記述する。
【００６１】
具体的には、通常のＣ言語による記述がされると、メモリ使用量削減部７４は、自動的に上述した余りのエリア他の変数の使用可能に、他の変数をある変数と合成する処理を行って、ある変数として記述する。
【図面の簡単な説明】
【００６２】
【図１】本発明の構造体型配列のメモリ使用量削減の手順を示す図である。
【図２】unsigned int型変数で取り扱えるデータ量を示す図である。
【図３】メモリ削減ができる構造体のメンバの共有化の組み合わせ例を示す図である。
【図４】本発明のデータ読み出し時のフローチャートである。
【図５】本発明のデータ書き込み時のフローチャートである。
【図６】本発明のデータをパックする際のフローチャートである。
【図７】本発明の構造体型配列のメモリ使用量削減装置の構成例を示す図である。
【図８】メモリ使用量削減部の機能を示すブロック図である。
【図９】従来技術の手法を示す図である。
【図１０】従来技術のメモリ使用装置を示す図である。
【図１１】ビットフィールドの使用例を示す図である。
【図１２】ビットフィールドの割り当てを示す図である。
【図１３】ビットフィールドの境界条件を示す図である。
【図１４】共有体の使用例を示す図である。
【図１５】従来技術のデータ読み出し時のフローチャートである。
【図１６】従来技術のデータ書き込み時のフローチャートである。
【符号の説明】
【００６３】
１…構造体型の宣言、２，３，４…メンバ、５…データの範囲、宣言されたメンバ２，３，４、６…実際に使用されるビット、７…未使用のビット、８…他のメンバのデータ、９，１０…複数のデータ、１２…他のメンバ、１３…１つのメンバ、２１…unsigned int型、２２…取り扱えるデータ量、２３…実際に取り扱うデータ量、２４…未使用8ビット、３１…unsigned int型データ、３３…short型/unsigned short型データ、３５…unsigned short型データ、３７…char型/unsigned char型データ、７１…プログラム、７２…制御手段、７３…オーディオコーデックＩＣ、７４…メモリ使用量削減部、７５…メモリ、７６…判別手段、７７…レジスタ、７８…演算手段、７９…メモリ、８０…オーディオコーデック部、８１…通常のＣ言語による記述、８２…メモリに対して使用するエリアを設定、８３…メモリの全エリア、８４…ある変数を使用するエリアを設定、８５…余りのエリア、８６…他の変数の書き込み許可、８７…処理手順を決定、８８…他の変数をある変数と合成、８９…ある変数として記述
【図１】
2005346272.tif 000003
【図２】
2005346272.tif 000004
【図３】
2005346272.tif 000005
【図４】
2005346272.tif 000006
【図５】
2005346272.tif 000007
【図６】
2005346272.tif 000008
【図７】
2005346272.tif 000009
【図８】
2005346272.tif 000010
【図９】
2005346272.tif 000011
【図１０】
2005346272.tif 000012
【図１１】
2005346272.tif 000013
【図１２】
2005346272.tif 000014
【図１３】
2005346272.tif 000015
【図１４】
2005346272.tif 000016
【図１５】
2005346272.tif 000017
【図１６】
2005346272.tif 000018