(57)【要約】【課題】簡易な処理によりシステムへの負担を軽減しつつ、効率的にメモリ領域を管理する。【解決手段】メモリ制御装置は、プログラムの実行に伴って要求されているデータサイズ以上を有する２ｎ個のＢＡＮＫを、メモリ管理領域３２の先頭アドレスから２ｎ個のＢＡＮＫを有するＢＬＯＣＫを単位として規定されるアドレス位置を始点とする（又は、２ｎ個のＢＡＮＫを有するＢＬＯＣＫ番号位置の）空き領域から確保する。また、メモリ管理領域３２内に要求されたデータサイズに応じた空き領域を生成する際に、２ｎ個のＢＡＮＫを単位とするアドレス位置を始点とする（又は、ＢＬＯＣＫ番号位置の）空き領域に移動させる。【選択図】図２
2020144709.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段と、
前記メモリ部の先頭アドレスから順に、前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態に応じて、前記単位ブロック領域を単位として前記要求されているデータを記憶するための領域を確保する領域確保手段と、
を備えることを特徴とするメモリ制御装置。
【請求項２】
前記メモリ部の前記アドレス位置に前記２ｎ個の空き状態の記憶領域がない場合に、前記単位ブロック領域ごとの前記記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段を、更に備えることを特徴とする請求項１に記載のメモリ制御装置。
【請求項３】
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段と、
前記メモリ部において前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段と、
を備えることを特徴とするメモリ制御装置。
【請求項４】
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御方法であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定し、
前記メモリ部の先頭アドレスから順に、前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態に応じて、前記単位ブロック領域を単位として前記要求されているデータを記憶するための領域を確保する、
ことを特徴とするメモリ制御方法。
【請求項５】
前記メモリ部の前記アドレス位置に前記２ｎ個の空き状態の記憶領域がない場合に、前記単位ブロック領域ごとの前記記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる、
ことを特徴とする請求項４に記載のメモリ制御方法。
【請求項６】
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御方法であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定し、
前記メモリ部において前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる、
ことを特徴とするメモリ制御方法。
【請求項７】
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置の制御プログラムであって、
前記メモリ制御装置を、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段、
前記メモリ部の先頭アドレスから順に、前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態に応じて、前記単位ブロック領域を単位として前記要求されているデータを記憶するための領域を確保する領域確保手段、
として機能させることを特徴とする制御プログラム。
【請求項８】
前記メモリ制御装置を、
前記メモリ部の前記アドレス位置に前記２ｎ個の空き状態の記憶領域がない場合に、前記単位ブロック領域ごとの前記記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段、
として機能させることを特徴とする請求項７に記載の制御プログラム。
【請求項９】
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置の制御プログラムであって、
前記メモリ制御装置を、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段、
前記メモリ部において前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段、
として機能させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行時に使用するメモリ領域を、動的（ダイナミック）な手法により確保するメモリ制御装置、メモリ制御方法及びそのプログラムに関する。
【背景技術】
【０００２】
従来、プログラムの実行時に使用するメモリ領域を、動的な手法により確保するメモリの制御方法が種々知られている。例えば、Ｃ言語を用いたプログラムにおいては、動的なメモリ確保のために用意されたヒープ領域から、malloc関数を用いてプログラムの実行に必要な任意のサイズのメモリブロックを確保し、そのメモリブロックにアクセスして、演算処理やデータの保存等に使用していた。そして、メモリブロックの確保が不要になった場合には、free関数を用いて当該メモリブロックを解放することにより、他の用途で再利用できるようにしていた。このようなメモリの制御方法については、例えば特許文献１に一般的な説明や適用例が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−３２２００７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述したようなメモリ領域の管理は、メモリを効率的に使用できる反面、その処理の煩雑さから、コンピュータシステムへの負担が増大するという問題を有していた。
【０００５】
そこで、本発明は、簡易な処理によりシステムへの負担を軽減しつつ、効率的にメモリ領域を管理することができるメモリ制御装置、メモリ制御方法及びそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一実施形態に係るメモリ制御装置は、
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段と、
前記メモリ部の先頭アドレスから順に、前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態に応じて、前記単位ブロック領域を単位として前記要求されているデータを記憶するための領域を確保する領域確保手段と、
を備えることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、簡易な処理によりシステムへの負担を軽減しつつ、効率的にメモリ領域を管理することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明に係るメモリ制御装置が適用されるコンピュータシステムの一例を示す概略ブロック図である。
【図２】一実施形態に係るメモリ制御装置において実行されるメモリ制御方法（メモリ領域取得処理）の一例を示すフローチャートである。
【図３】一実施形態に係るメモリ制御方法におけるメモリ領域取得処理を説明するための概略図である。
【図４】一実施形態に係るメモリ制御方法に適用されるメモリ領域移動処理の一例を示すフローチャートである。
【図５】一実施形態に係るメモリ制御方法に適用されるメモリ領域移動処理を説明するための概略図である。
【図６】比較例におけるメモリ制御方法の一例を示す図（その１）である。
【図７】比較例におけるメモリ制御方法の一例を示す図（その２）である。
【図８】比較例におけるメモリ制御方法の一例を示す図（その３）である。
【図９】比較例におけるメモリ制御方法の一例を示す図（その４）である。
【図１０】一実施形態に係るメモリ制御方法の作用効果を示す説明図（その１）である。
【図１１】一実施形態に係るメモリ制御方法の作用効果を示す説明図（その２）である。
【図１２】一実施形態に係るメモリ制御方法の作用効果を示す説明図（その３）である。
【発明を実施するための形態】
【０００９】
以下、本発明に係るメモリ制御装置、メモリ制御方法及びそのプログラムについて、実施形態を示して詳しく説明する。なお、以下の説明では、本発明に係るメモリ制御装置を汎用のコンピュータシステムに適用した場合について説明する。
【００１０】
＜メモリ制御装置＞
図１は、本発明に係るメモリ制御装置が適用されるコンピュータシステムの一例を示す概略ブロック図である。
【００１１】
本発明に係るメモリ制御装置は、例えば図１に示すように、概略、ＣＰＵやＭＰＵ等の演算処理部１０と、データ記憶用の領域が動的に確保されるメモリ管理領域３２が設定されたメモリ部３０と、演算処理部１０からの指示に基づいてメモリ部３０のメモリ管理領域３２における領域の割当ての状態を管理するメモリ制御装置２０と、を有している。
【００１２】
演算処理部１０は、プログラムを実行することにより発生する割当て要求に基づいて、メモリ制御装置２０に対して、メモリ部３０において記憶領域を動的に確保する処理を実行させる指示を行う。メモリ制御装置２０は、演算処理部１０からの指示に基づいて、メモリ部３０に対して、所定のアルゴリズムに従って、プログラムの要求するデータサイズに応じた所定の記憶容量の領域を、当該領域を単位として規定されるアドレス位置を始点とする空き領域から確保する処理を実行する。
【００１３】
メモリ部３０は、プログラムを実行することにより生成される、或いは、コンピュータシステムの内外から取得したデータを、メモリ制御装置２０によりメモリ管理領域３２に確保された記憶領域に記憶（又は、一時保存）する。メモリ管理領域３２の具体的な構成については、後述する。なお、メモリ部３０は、メモリ管理領域３２に加え、コンピュータシステム全体を制御するオペレーションシステムや、演算処理部１０において実行されるプログラムを記憶する領域を有するものであってもよい。
【００１４】
＜メモリ制御方法＞
次に、本実施形態に係るメモリ制御装置における制御方法（メモリ制御方法）について図面を参照して説明する。ここで、本実施形態に係るメモリ制御方法は、メモリ制御装置２０において所定のアルゴリズムに基づく制御プログラムを実行することにより実現される。
【００１５】
図２は、本実施形態に係るメモリ制御装置において実行されるメモリ制御方法（メモリ領域取得処理）の一例を示すフローチャートであり、図３は、本実施形態に係るメモリ制御方法におけるメモリ領域取得処理を説明するための概略図である。図４は、本実施形態に係るメモリ制御方法に適用されるメモリ領域移動処理の一例を示すフローチャートであり、図５は、本実施形態に係るメモリ制御方法に適用されるメモリ領域移動処理を説明するための概略図である。
【００１６】
本実施形態に係るメモリ制御方法は、概略、メインルーチンであるメモリ領域取得処理と、メモリ領域取得処理における特定の条件下で実行されるサブルーチンであるメモリ領域移動処理と、を有している。
【００１７】
（メモリ領域取得処理）
メモリ領域取得処理においては、例えば図２のフローチャートに示すように、まず、演算処理部１０において所定のプログラムを実行することにより、データ記憶用の領域の割当て要求が発生すると、メモリ制御装置２０は、要求されているデータサイズに基づいて、メモリ部３０のメモリ管理領域３２に確保するＢＡＮＫの数を算出する（ステップＳ１０２）。具体的には、メモリ制御装置２０は、演算処理部１０から割当て要求を受け取ると、要求されているデータサイズ以上であって、かつ、基本容量の２のべき乗（２ｎ；指数ｎ＝０、１、２、３、４、・・・）倍となる最小のデータサイズに対応するＢＡＮＫ（メモリバンク）の数を算出する。
【００１８】
ここで、本願明細書において、「ＢＡＮＫ」は、例えば画像データ等を記憶するための基本容量を有する記憶領域を規定するものであって、本実施形態では、要求されているデータサイズに応じて算出され、アドレス（又は、ＢＬＯＣＫ番号）が連続する２ｎ個の「ＢＡＮＫ」で１つの「ＢＬＯＣＫ」（メモリブロック；単位ブロック領域）を形成する。すなわち、１ＢＬＯＣＫは、要求されているデータサイズに応じて、１（＝２０）、２（＝２１）、４（＝２２）、８（＝２３）、・・・個のＢＡＮＫにより形成されることになる。ここで、例えば１ＢＡＮＫの記憶容量（基本容量）を１ＭＢに設定した場合には、１ＢＬＯＣＫの記憶容量は、それぞれ１ＭＢ、２ＭＢ、４ＭＢ、８ＭＢ、・・・に設定される。したがって、例えば、要求されているデータサイズが７ＭＢの場合には、７ＭＢ以上であって、かつ、基本容量（１ＭＢ）の２ｎ倍となる最小のデータサイズ（８ＭＢ）に対応する８（８ＭＢ÷１ＭＢ＝２３）個のＢＡＮＫにより１ＢＬＯＣＫが形成される。
【００１９】
次いで、メモリ制御装置２０は、算出されたＢＡＮＫ数を用いて、メモリ管理領域３２に設定されるＢＬＯＣＫの総数を算出する（ステップＳ１０４）。具体的には、メモリ制御装置２０は、メモリ管理領域３２を形成する全ＢＡＮＫ数を、上記のステップＳ１０２において算出されたＢＡＮＫ数で除算することにより、メモリ管理領域３２に設定されるＢＬＯＣＫの総数ｍｍａｘを算出する。例えばメモリ管理領域３２が１６個のＢＡＮＫにより形成されている場合、１ＢＬＯＣＫが１（＝２０）個のＢＡＮＫで形成されている場合には１６ＢＬＯＣＫが設定され、１ＢＬＯＣＫが２（＝２１）個のＢＡＮＫで形成されている場合には８ＢＬＯＣＫが設定される。また、１ＢＬＯＣＫが４（＝２２）個のＢＡＮＫで形成されている場合には４ＢＬＯＣＫが設定され、１ＢＬＯＣＫが８（＝２３）個のＢＡＮＫで形成されている場合には２ＢＬＯＣＫが設定される。
【００２０】
次いで、メモリ制御装置２０は、メモリ管理領域３２に設定された各ＢＬＯＣＫについて、プログラムの割当て要求に対する状態（Ｓｔａｔｕｓ）を取得する（ステップＳ１０６）。ここでは、メモリ制御装置２０は、メモリ管理領域３２に設定されたＢＬＯＣＫ単位で、各ＢＡＮＫがプログラムからの割当て要求に対して、割当ての対象となっていない「Ｅｍｐｔｙ」（空き状態）、又は、割当ての対象となって確保されているものの、現時点では使用されていない「Ｒｅｓｅｒｖｅ」（予約状態）、又は、プログラムにより実際に使用されている「Ｕｓｅ」（使用状態）のいずれの状態に設定されているかを検出する。この検出結果は、状態情報として取得される。
【００２１】
次いで、メモリ制御装置２０は、取得した状態情報に基づいて、ＢＬＯＣＫ内の全てのＢＡＮＫがＥｍｐｔｙ（空き状態）に設定されているか否かを判定する（ステップＳ１０８）。ここでは、メモリ制御装置２０は、上記のステップＳ１０４において算出された総数ｍｍａｘのＢＬＯＣＫのうちのｍ番目（ｍは１〜ｍｍａｘの整数、初期値ｍ＝１）のＢＬＯＣＫについて、当該ＢＬＯＣＫ内の各ＢＡＮＫがＥｍｐｔｙ（空き状態）に設定されているか否かを判定する空き状態判定処理を実行する。この空き状態判定処理は、メモリ管理領域３２に設定された先頭のアドレス（又は、ＢＬＯＣＫ番号）の１番目のＢＬＯＣＫから実行され、後述するステップＳ１１２、Ｓ１１４により、ＢＬＯＣＫの順番を規定する変数ｍが順次加算されて（ｍ←ｍ＋１）、総数であるｍｍａｘ番目のＢＬＯＣＫまで繰り返し実行される。
【００２２】
上記のステップＳ１０８において、判定結果がＹｅｓの場合には、メモリ制御装置２０は、当該ＢＬＯＣＫ内の全てのＢＡＮＫ（要求データサイズ以上で最小の２ｎ個のＢＡＮＫ全て）をデータ記憶用に確保して、各ＢＡＮＫの状態情報を、Ｅｍｐｔｙ（空き状態）からＲｅｓｅｒｖｅ（予約状態）に変更するとともに（ステップＳ１１０）、各ＢＡＮＫのＩＤを更新して、メモリ領域取得処理を終了する。
【００２３】
ここで、２ｎ個のＢＡＮＫにより形成されるＢＬＯＣＫ単位で、データ記憶用のＢＡＮＫを確保する手法について、図面を参照して説明する。ここでは、例えば図３に示すように、メモリ管理領域３２に１６個の画像データ記憶用のＢＡＮＫ（「IMAGE BANK 000 ／ID＝00000000」〜「IMAGE BANK 015／ID＝00000015」）がアドレス（又は、ＢＬＯＣＫ番号）順に設定され、当該メモリ管理領域３２に対して、１ＢＬＯＣＫを形成するＢＡＮＫの数が１（＝２０）、２（＝２１）、４（＝２２）、８（＝２３）の順で変化した場合における、記憶領域の確保手法について説明する。
【００２４】
まず、メモリ管理領域３２が初期化された状態では、図３（ａ）に示すように、全てのＢＡＮＫ（IMAGE BANK 000〜IMAGE BANK 015）がＥｍｐｔｙ（空き状態；図中では枠内背景を白抜きで表示）に設定される。そして、プログラムが実行されることにより記憶領域の割当て要求が発生すると、メモリ制御装置２０は、演算処理部１０から要求されているデータサイズが１ＢＡＮＫ分以下の場合には、上記のステップＳ１０２によりＢＡＮＫ数を１（＝２０）と算出して１ＢＬＯＣＫ＝１ＢＡＮＫ（プログラムにおけるデータの参照関係に基づいて相互に関連付けられて連結されたＢＡＮＫの個数；Num of Chain＝１）に設定する。そして、メモリ制御装置２０は、図３（ｂ）に示すように、メモリ管理領域３２の先頭からアドレス（又は、ＢＬＯＣＫ番号）の小さい順に、ＢＬＯＣＫ単位（＝１ＢＡＮＫ単位）で記憶領域を確保する。ここでは、メモリ管理領域３２の全てのＢＡＮＫ（IMAGE BANK 000〜IMAGE BANK 015）がＥｍｐｔｙ（空き状態）に設定されているので、先頭のアドレス（又は、ＢＬＯＣＫ番号）の１ＢＬＯＣＫ目を形成する１番目のＢＡＮＫ（IMAGE BANK 000）が確保されて、Ｒｅｓｅｒｖｅ（予約状態；図中では枠内背景をハーフトーンで表示）に変更されるとともにＩＤが更新される（「ID＝00000000」→「ID＝00000016」）。
【００２５】
次いで、要求されているデータサイズが１ＢＡＮＫ分よりも大きく２ＢＡＮＫ分以下の場合には、メモリ制御装置２０は、上記のステップＳ１０２によりＢＡＮＫ数を２（＝２１）と算出して１ＢＬＯＣＫ＝２ＢＡＮＫ（相互に関連付けられて連結されたＢＡＮＫの個数；Num of Chain＝２）に設定する。そして、メモリ制御装置２０は、図３（ｃ）に示すように、メモリ管理領域３２の先頭からアドレス（又は、ＢＬＯＣＫ番号）の小さい順に、ＢＬＯＣＫ単位（＝２ＢＡＮＫ単位）で記憶領域を確保する。ここでは、メモリ管理領域３２のＢＡＮＫ（IMAGE BANK 000〜IMAGE BANK 015）のうち、１ＢＬＯＣＫ目を形成する１番目のＢＡＮＫ（IMAGE BANK 000）がすでに確保されて、プログラムにより使用されている状態であるＵｓｅ（使用状態；図中では枠内背景をハッチングで表示）に設定されている。そのため、メモリ制御装置２０は、メモリ管理領域３２の先頭のアドレス（又は、ＢＬＯＣＫ番号）から２ＢＬＯＣＫ目の３番目及び４番目のＢＡＮＫ（IMAGE BANK 002、IMAGE BANK 003）を確保して、Ｒｅｓｅｒｖｅ（予約状態；図中ハーフトーンで表示）に変更するとともにＩＤを更新する（「ID＝00000002」→「ID＝00000017」、「ID＝00000003」→「ID＝00000018」）。
【００２６】
次いで、要求されているデータサイズが２ＢＡＮＫ分よりも大きく４ＢＡＮＫ分以下の場合には、メモリ制御装置２０は、ＢＡＮＫ数を４（＝２２）と算出して１ＢＬＯＣＫ＝４ＢＡＮＫ（相互に関連付けられて連結されたＢＡＮＫの個数；Num of Chain＝４）に設定する。そして、メモリ制御装置２０は、図３（ｄ）に示すように、メモリ管理領域３２の先頭のアドレス（又は、ＢＬＯＣＫ番号）からＢＬＯＣＫ単位（＝４ＢＡＮＫ単位）で記憶領域を確保する。ここでは、メモリ管理領域３２の１ＢＬＯＣＫ目を形成する１番目、３番目、４番目のＢＡＮＫ（IMAGE BANK 000、IMAGE BANK 002、IMAGE BANK 003）がすでにプログラムにより使用されている状態であるＵｓｅ（使用状態；図中ハッチングで表示）に設定されている。そのため、メモリ制御装置２０は、メモリ管理領域３２の先頭のアドレス（又は、ＢＬＯＣＫ番号）から２ＢＬＯＣＫ目の５番目〜８番目のＢＡＮＫ（IMAGE BANK 004〜IMAGE BANK 007）を確保して、Ｒｅｓｅｒｖｅ（予約状態；図中ハーフトーンで表示）に変更するとともにＩＤを更新する（「ID＝00000004」→「ID＝00000019」、・・・「ID＝00000007」→「ID＝00000022」）。
【００２７】
次いで、要求されているデータサイズが４ＢＡＮＫ分よりも大きく８ＢＡＮＫ分以下の場合には、メモリ制御装置２０は、ＢＡＮＫ数を８（＝２３）と算出して１ＢＬＯＣＫ＝８ＢＡＮＫ（相互に関連付けられて連結されたＢＡＮＫの個数；Num of Chain＝８）に設定する。そして、メモリ制御装置２０は、図３（ｅ）に示すように、メモリ管理領域３２の先頭のアドレス（又は、ＢＬＯＣＫ番号）からＢＬＯＣＫ単位（＝８ＢＡＮＫ単位）で記憶領域を確保する。ここでは、メモリ管理領域３２の１ＢＬＯＣＫ目を形成する１番目、３番目〜８番目のＢＡＮＫ（IMAGE BANK 000、IMAGE BANK 002〜IMAGE BANK 007）がすでにプログラムにより使用されている状態であるＵｓｅ（使用状態；図中ハッチングで表示）に設定されている。そのため、メモリ制御装置２０は、メモリ管理領域３２の先頭のアドレス（又は、ＢＬＯＣＫ番号）から２ＢＬＯＣＫ目の９番目〜１６番目のＢＡＮＫ（IMAGE BANK 008〜IMAGE BANK 015）を確保して、Ｒｅｓｅｒｖｅ（予約状態；図中ハーフトーンで表示）に変更するとともにＩＤを更新する（「ID＝00000008」→「ID＝00000023」、・・・「ID＝0000015」→「ID＝00000030」）。
【００２８】
一方、上記のステップＳ１０８において、判定結果がＮｏの場合には、メモリ制御装置２０は、次の順番のＢＬＯＣＫを空き状態判定処理の対象とするように設定する（ステップＳ１１２）。具体的には、メモリ制御装置２０は、空き状態判定処理の対象となるＢＬＯＣＫの順番を規定する変数ｍを１加算して（ｍ←ｍ＋１）、次の順番のＢＬＯＣＫを処理対象に設定する。このとき、メモリ制御装置２０は、メモリ管理領域３２に設定されたＢＬＯＣＫの総数分の空き状態判定処理がすでに完了しているか否かを判定する（ステップＳ１１４）。具体的には、メモリ制御装置２０は、ステップＳ１１２において設定された次の順番のＢＬＯＣＫを規定する変数ｍが、ＢＬＯＣＫの総数ｍｍａｘを越えている場合には、すでに全てのＢＬＯＣＫの空き状態判定処理が完了しているものと判定する。
【００２９】
上記のステップＳ１１４において、判定結果がＮｏの場合には、メモリ制御装置２０は、全てのＢＬＯＣＫについて空き状態判定処理が完了していないと判定して、ステップＳ１０８に戻って、次の順番（ｍ番目）のＢＬＯＣＫについて、当該ＢＬＯＣＫ内の全てのＢＡＮＫがＥｍｐｔｙ（空き状態）に設定されているか否かを再度判定する。
【００３０】
このように、ステップＳ１０８〜Ｓ１１４の一連の処理を繰り返し実行することにより、メモリ管理領域３２に設定された全てのＢＬＯＣＫについて、先頭のアドレス（又は、ＢＬＯＣＫ番号）から順にＢＬＯＣＫ単位で各ＢＡＮＫの空き状態が確認され、全てのＢＡＮＫがＥｍｐｔｙ（空き状態）に設定され、かつ、アドレス（又は、ＢＬＯＣＫ番号）が小さいＢＬＯＣＫから順に、割当て要求に応じた記憶領域として確保する処理が実行された後、メモリ領域取得処理が終了する。
【００３１】
一方、上記のステップＳ１１４において、判定結果がＹｅｓの場合には、メモリ制御装置２０は、全てのＢＬＯＣＫについて空き状態判定処理がすでに完了していて、ＢＬＯＣＫ内の全てのＢＡＮＫがＥｍｐｔｙ（空き状態）に設定されている次のＢＬＯＣＫは存在しないと判定する。すなわち、メモリ制御装置２０は、ＢＬＯＣＫ単位では、ステップＳ１０２で算出した、要求されているデータサイズ以上の記憶領域に対応するＢＡＮＫ数を有するＢＬＯＣＫがメモリ管理領域３２内に存在しないと判定する。
【００３２】
そして、メモリ制御装置２０は、メモリ管理領域３２内に、ステップＳ１０２で算出した２ｎ個のＢＡＮＫ数分の空き領域が存在するか否かを判定する（ステップＳ１１６）。すなわち、２ｎ個の連続するＢＡＮＫにより形成されるＢＬＯＣＫの設定に関わらず、メモリ管理領域３２全体において、要求されているデータサイズ分以上の空き領域に対応する数（２ｎ個）のＢＡＮＫが存在するか否かを判定する。ここで、空き領域として判定されるＢＡＮＫは、プログラムにより使用中ではなく、かつ、メモリ管理領域３２内で移動が可能な記憶領域であって、メモリ管理領域３２内に散在するものである。
【００３３】
上記のステップＳ１１６において、判定結果がＹｅｓの場合には、メモリ制御装置２０は、後述するメモリ領域移動処理（ステップＳ２０２〜Ｓ２２０）を実行し（ステップＳ１１８）、処理終了後に、メモリ領域取得処理を終了する。一方、ステップＳ１１６において、判定結果がＮｏの場合には、メモリ制御装置２０は、現時点ではメモリ管理領域３２内に要求されているデータサイズに応じた記憶領域を確保できないと判定して（ステップＳ１２０）、メモリ領域取得処理を終了する。ここで、メモリ制御装置２０は、現在実行中のプログラムによる処理が進んで、Ｕｓｅ（使用状態）に設定されていたＢＡＮＫが解放されてＥｍｐｔｙ（空き状態）に変更された場合には、上記の一連のメモリ領域取得処理（後述するメモリ領域移動処理を含む）を再度実行する。
【００３４】
（メモリ領域移動処理）
上述したメモリ領域取得処理のステップＳ１１６において、メモリ管理領域３２内にプログラムで要求されているデータサイズ分以上の空き領域に対応する数のＢＡＮＫを有するＢＬＯＣＫ（２ｎ個の連続するＢＡＮＫにより形成されるＢＬＯＣＫ）は存在しないが、メモリ管理領域３２内に対応する数のＢＡＮＫが散在すると判定された場合（判定結果がＹｅｓの場合）には、メモリ制御装置２０は、次のようなメモリ領域移動処理を実行する。
【００３５】
メモリ領域移動処理においては、例えば図４のフローチャートに示すように、メモリ制御装置２０は、まず、移動元となるＢＡＮＫを有するＢＬＯＣＫを選定するための移動元選定処理を実行した後、選定されたＢＬＯＣＫの移動先を選定して移動させるための移動先選定・移動処理を実行する。
【００３６】
移動元選定処理においては、メモリ制御装置２０は、まず、ＢＬＯＣＫ内の全てのＢＡＮＫがＥｍｐｔｙ（空き状態）又はＲｅｓｅｒｖｅ（予約状態）に設定されているか否かを判定する（ステップＳ２０２）。ここでは、メモリ制御装置２０は、上述したメモリ領域取得処理のステップＳ１０６において取得した状態情報に基づいて、各ＢＬＯＣＫについて、Ｅｍｐｔｙ（空き状態）に設定されているＢＡＮＫ数、Ｒｅｓｅｒｖｅ（予約状態）に設定されているＢＡＮＫ数、及び、プログラムにおけるデータの参照関係に基づいて相互に関連付けられて連結されたＢＡＮＫの個数（Num of Chain）を調べてＢＡＮＫ数情報として取得する。次いで、メモリ制御装置２０は、ｍ番目（ｍは１〜ｍｍａｘの整数、初期値ｍ＝１）のＢＬＯＣＫについて、当該ＢＬＯＣＫ内の各ＢＡＮＫがＥｍｐｔｙ（空き状態）又はＲｅｓｅｒｖｅ（予約状態）のいずれかに設定されているか否かを判定する。これにより、ＢＬＯＣＫ内にＵｓｅ（使用状態）に設定されたＢＡＮＫが含まれていないか否かが判定される。ここで、本実施形態においては、Ｕｓｅ（使用状態）に設定されたＢＡＮＫを有するＢＬＯＣＫは、メモリ領域移動処理における移動対象とはならない。また、後述する処理により移動対象となるＢＬＯＣＫであっても、当該ＢＬＯＣＫ内のＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫも移動対象とはならない。
【００３７】
上記のステップＳ２０２において、判定結果がＹｅｓの場合には、メモリ制御装置２０は、当該ＢＬＯＣＫがＥｍｐｔｙ（空き状態）又はＲｅｓｅｒｖｅ（予約状態）に設定されたＢＡＮＫのみで形成されている（すなわち、Ｕｓｅ（使用状態）に設定されたＢＡＮＫが含まれていない）と判定する。そして、メモリ制御装置２０は、ステップＳ２０２において取得したＢＡＮＫ数情報に基づいて、当該ＢＬＯＣＫのＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数が、先に選定された暫定移動の対象となるＢＬＯＣＫにおけるＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数よりも多いか否かを判定する（ステップＳ２０４）。なお、後述するように、当該ステップが最初に実行される際は、この判定結果はＹｅｓとなり、後述するステップＳ２０６において、当該ＢＬＯＣＫが暫定移動の対象となるＢＬＯＣＫとして更新される。
【００３８】
上記のステップＳ２０４において、判定結果がＹｅｓの場合には、メモリ制御装置２０は、当該ＢＬＯＣＫを暫定移動の対象となるＢＬＯＣＫとして更新する（ステップＳ２０６）。すなわち、メモリ制御装置２０は、ＢＬＯＣＫ内のＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数がより多く、相対的に移動対象となるＢＡＮＫの数が少ないＢＬＯＣＫを移動元に選定するように、暫定移動の対象となるＢＬＯＣＫを順次更新する。これらのステップＳ２０２〜Ｓ２０６において実行される一連の判定処理は、メモリ管理領域３２に設定された先頭のアドレス（又は、ＢＬＯＣＫ番号）を有する１番目のＢＬＯＣＫから実行され、後述するステップＳ２０８、Ｓ２１０により、総数であるｍｍａｘ番目のＢＬＯＣＫまで順次繰り返し実行される。
【００３９】
ここで、ステップＳ２０４、Ｓ２０６において、暫定移動の対象となるＢＬＯＣＫとは、移動元となるＢＬＯＣＫを選定するための中間段階として暫定的に選定されるＢＬＯＣＫのことであって、初期状態では暫定移動の対象となるＢＬＯＣＫにおけるＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数は例えば「０」に設定されて、ステップＳ２０４の条件を満たす（判定結果がＹｅｓとなる）最初のＢＬＯＣＫが選定される。以降、ステップＳ２０２の条件を満たすＢＬＯＣＫについて、ステップＳ２０４において、先に選定された暫定移動の対象となるＢＬＯＣＫにおけるＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数との比較処理が行われて、Ｅｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数が多いＢＬＯＣＫが暫定移動の対象となるＢＬＯＣＫとして選定される。
【００４０】
一方、上記のステップＳ２０２又はＳ２０４において、判定結果がＮｏの場合、或いは、ステップＳ２０６において暫定移動の対象となっているＢＬＯＣＫを更新した後には、メモリ制御装置２０は、次の順番のＢＬＯＣＫをステップＳ２０２〜Ｓ２０６の一連の判定処理の対象とするように、ＢＬＯＣＫの順番を規定する変数ｍを設定（ｍ←ｍ＋１）する（ステップＳ２０８）。このとき、メモリ制御装置２０は、ステップＳ２０８において設定された次の順番のＢＬＯＣＫを規定する変数ｍとＢＬＯＣＫの総数ｍｍａｘとを比較することにより、ＢＬＯＣＫの総数分の判定処理がすでに完了しているか否かを判定する（ステップＳ２１０）。
【００４１】
上記のステップＳ２１０において、判定結果がＮｏの場合には、メモリ制御装置２０は、全てのＢＬＯＣＫについて判定処理が完了していないと判定して、ステップＳ２０２に戻って、次の順番（ｍ番目）のＢＬＯＣＫについて、当該ＢＬＯＣＫ内の全てのＢＡＮＫがＥｍｐｔｙ（空き状態）又はＲｅｓｅｒｖｅ（予約状態）のいずれかに設定されているか否かを再度判定する。
【００４２】
一方、上記のステップＳ２１０において、判定結果がＹｅｓの場合には、メモリ制御装置２０は、全てのＢＬＯＣＫについて判定処理がすでに完了していると判定し、上記のステップＳ２０６において暫定移動の対象として最後に更新されたＢＬＯＣＫを、移動元となるＢＡＮＫを有するＢＬＯＣＫとして確定する（ステップＳ２１２）。
【００４３】
このように、ステップＳ２０２〜Ｓ２１０の一連の処理を繰り返し実行することにより、メモリ管理領域３２に設定された全てのＢＬＯＣＫについて、先頭のアドレス（又は、ＢＬＯＣＫ番号）から順にＢＬＯＣＫ内の各ＢＡＮＫの状態が確認され、全てのＢＡＮＫがＥｍｐｔｙ（空き状態）又はＲｅｓｅｒｖｅ（予約状態）に設定され、かつ、Ｅｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数が最も多いＢＬＯＣＫが、移動元のＢＬＯＣＫとして選定される。
【００４４】
次いで、移動先選定・移動処理においては、メモリ制御装置２０は、演算処理部１０により実行されるプログラムにおけるデータの参照関係に基づいて、メモリ管理領域３２内で相互に関連付けられて連結されたＢＡＮＫ群（Chain BANK）を単位として、空き状態に設定されたＢＬＯＣＫを検出する（ステップＳ２１４）。このとき、メモリ制御装置２０は、検出されたＢＬＯＣＫのうちのアドレス（又は、ＢＬＯＣＫ番号）の小さい方を優先して、移動先となるＢＡＮＫを有するＢＬＯＣＫとして選定する。ここで、メモリ制御装置２０は、メモリ管理領域３２内の空き状態に設定されたＢＬＯＣＫを検出しているので、移動元のＢＬＯＣＫ内の各ＢＡＮＫのアドレスと、移動先となるＢＬＯＣＫのＢＡＮＫのアドレスとが重なる（重複する）ことはない。
【００４５】
次いで、メモリ制御装置２０は、上記のステップＳ２１４により選定された移動先ＢＬＯＣＫに、上述した移動元選定処理により確定した移動元ＢＬＯＣＫの各ＢＡＮＫを移動させる（ステップＳ２１６）。その後、メモリ制御装置２０は、移動元ＢＬＯＣＫ内に移動対象となっている他のＢＡＮＫがあるか否かを判定し（ステップＳ２１８）、判定結果がＹｅｓの場合には、ステップＳ２１４に戻って、ＢＡＮＫ群（Chain BANK）単位で各ＢＬＯＣＫの空き状態を再度検出して、移動対象となっている他のＢＡＮＫの移動先となるＢＬＯＣＫを選定する。
【００４６】
このように、ステップＳ２１４〜Ｓ２１８の一連の処理を繰り返し実行することにより、特定のＢＡＮＫ群（Chain BANK）単位で移動先のＢＬＯＣＫが選定されて、移動元ＢＬＯＣＫ内の移動対象となっている全てのＢＡＮＫを順次移動させる処理が実行される。
【００４７】
一方、上記のステップＳ２１８において、判定結果がＮｏの場合には、メモリ制御装置２０は、移動元ＢＬＯＣＫ内の移動対象となっている全てのＢＡＮＫの移動が完了したと判定して、移動元ＢＬＯＣＫ内の各ＢＡＮＫの状態情報を、移動先においてＲｅｓｅｒｖｅ（予約状態）に変更するとともに（ステップＳ２２０）、移動元及び移動先の各ＢＡＮＫのＩＤを更新して、メモリ領域移動処理を終了する。
【００４８】
ここで、プログラムで要求されているデータサイズ分以上の空き領域に対応する数のＢＡＮＫを有するＢＬＯＣＫがメモリ管理領域３２に存在しない場合において、上述したメモリ領域移動処理を適用してＢＬＯＣＫを形成するＢＡＮＫを移動することにより、データ記憶用のＢＡＮＫを確保する手法について、図面を参照して説明する。ここでは、例えば図５に示すように、メモリ管理領域３２に１６個の画像データ記憶用のＢＡＮＫ（IMAGE BANK 000〜IMAGE BANK 015）がアドレス（又は、ＢＬＯＣＫ番号）順に設定されている場合において、特定のＢＡＮＫ群（Chain BANK）単位で移動先を探して記憶領域を確保する手法について説明する。
【００４９】
まず、プログラムが実行されてメモリ管理領域３２に対する割当て要求が繰り返されることにより、例えば図５（ａ）に示すように、記憶領域が確保された状態（便宜的に「現時点状態」と記す）において、新たに４（＝２２）ＢＡＮＫ分のデータサイズを有する記憶領域の確保を要求された場合を想定する。ここで、要求されているデータサイズは４ＢＡＮＫ分であるので、１ＢＬＯＣＫは４（＝２２）ＢＡＮＫに設定され、１６個のＢＡＮＫを有するメモリ管理領域３２には、４ＢＬＯＣＫ（ＢＬＯＣＫ０〜ＢＬＯＣＫ３）が設定される。
【００５０】
そして、現時点状態では、例えば図５（ａ）に示すように、ＢＬＯＣＫ０では４個のＢＡＮＫのうち、３ＢＡＮＫがＥｍｐｔｙ（空き状態）に設定され、ＢＬＯＣＫ１では２ＢＡＮＫがＥｍｐｔｙ（空き状態）に設定され、ＢＬＯＣＫ３では１ＢＡＮＫがＥｍｐｔｙ（空き状態）に設定されている。また、ＢＬＯＣＫ２ではＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫは存在しない。このような現時点状態においては、各ＢＬＯＣＫを形成する４ＢＡＮＫ全てがＥｍｐｔｙ（空き状態）に設定されているＢＬＯＣＫは存在しないため、要求されているデータサイズに応じた記憶領域を確保することはできない。
【００５１】
そこで、上述したメモリ領域移動処理において説明したように、メモリ制御装置２０は、まず、移動元となるＢＬＯＣＫを選定する。具体的には、メモリ制御装置２０は、各ＢＬＯＣＫ（ＢＬＯＣＫ０〜ＢＬＯＣＫ３）について、Ｅｍｐｔｙ（空き状態）に設定されているＢＡＮＫ数、Ｒｅｓｅｒｖｅ（予約状態）に設定されているＢＡＮＫ数、及び、プログラムにおけるデータの参照関係に基づいて相互に関連付けられて連結されたＢＡＮＫの個数（Num of Chain）を調べてＢＡＮＫ数情報として取得する。そして、本実施形態においては、このＢＡＮＫ数情報に基づいて、Ｕｓｅ（使用状態）に設定されたＢＡＮＫを有するＢＬＯＣＫを移動対象から除外し、その他のＢＬＯＣＫのうちでＥｍｐｔｙ（空き状態）に設定されたＢＡＮＫの数が多いＢＬＯＣＫを移動対象とする手法により、図５（ａ）に示すＢＬＯＣＫ３が移動元として選定される。
【００５２】
次いで、メモリ制御装置２０は、移動先となるＢＬＯＣＫを選定する。具体的には、メモリ制御装置２０は、移動元であるＢＬＯＣＫ３を形成する各ＢＡＮＫ（IMAGE BANK 012〜IMAGE BANK 015）について、上記のＢＡＮＫ数情報に基づいて、相互に関連付けられて連結されたＢＡＮＫ群（Chain BANK）として、IMAGE BANK 012とIMAGE BANK 013の２ＢＡＮＫにより形成される１ＢＬＯＣＫ（Num of Chain＝２）を検出する。そして、メモリ制御装置２０は、移動先を選定する際に、メモリ管理領域３２の先頭からアドレス（又は、ＢＬＯＣＫ番号）の小さい順に、２（＝２１）ＢＡＮＫを単位として規定される（すなわち、２ＢＡＮＫごとの）アドレス位置（又は、ＢＬＯＣＫ番号位置）における空き領域を探す。これにより、メモリ制御装置２０は、図５（ｂ）に示すＢＬＯＣＫ０を移動先として選定して、図５（ａ）に示した移動元のＢＬＯＣＫ３を形成する２ＢＡＮＫ（IMAGE BANK 012、IMAGE BANK 013）を、ＢＬＯＣＫ０内のIMAGE BANK 002、IMAGE BANK 003に移動させる（図中、丸数字の「１」）。
【００５３】
ここで、ＢＬＯＣＫ０を形成する４ＢＡＮＫ（IMAGE BANK 000〜IMAGE BANK 003）のうちの先頭のアドレス（又は、ＢＬＯＣＫ番号）のＢＡＮＫ（IMAGE BANK 000）はＵｓｅ（使用状態）に設定されているため、このＢＡＮＫを含む２ＢＡＮＫ（IMAGE BANK 000、IMAGE BANK 001）を移動先から除外する。そして、２ＢＡＮＫを単位とする次のアドレス位置（又は、ＢＬＯＣＫ番号位置）に存在する空き状態の２ＢＡＮＫ（IMAGE BANK 002、IMAGE BANK 003）を対象にして、移動元のＢＬＯＣＫ３の２ＢＡＮＫ（IMAGE BANK 012、IMAGE BANK 013）を移動させる。このとき、メモリ制御装置２０は、移動元のＢＬＯＣＫ３の２ＢＡＮＫ（IMAGE BANK 012、IMAGE BANK 013）のＩＤを更新するとともに（「ID＝00000023」→「ID＝00000026」、「ID＝00000024」→「ID＝00000027」）、移動先のＢＬＯＣＫ０の２ＢＡＮＫ（IMAGE BANK 002、IMAGE BANK 003）のＩＤを更新する（「ID＝00000002」→「ID＝00000023」、「ID＝00000003」→「ID＝00000024」）。
【００５４】
次いで、メモリ制御装置２０は、移動元のＢＬＯＣＫ３に移動対象となっている他のＢＡＮＫがあるか否かを判定し、IMAGE BANK 014についても上記と同様の処理を実行する。ここで、IMAGE BANK 014は、上記のＢＡＮＫ数情報に基づいて、１ＢＡＮＫにより形成される１ＢＬＯＣＫ（Num of Chain＝１）として検出される。この場合には、メモリ制御装置２０は、移動先を選定する際に、メモリ管理領域３２の先頭からアドレス（又は、ＢＬＯＣＫ番号）の小さい順に、検出された１（＝２０）ＢＡＮＫを単位とする（すなわち、１ＢＡＮＫごとの）アドレス位置（又は、ＢＬＯＣＫ番号位置）における空き領域を探す。これにより、メモリ制御装置２０は、図５（ｃ）に示すＢＬＯＣＫ０を移動先として選定して、図５（ａ）又は（ｂ）に示した移動元のＢＬＯＣＫ３を形成する１ＢＡＮＫ（IMAGE BANK 014）を、ＢＬＯＣＫ０内のIMAGE BANK 001に移動させる（図中、丸数字の「２」）。
【００５５】
ここで、上述したように、ＢＬＯＣＫ０の４ＢＡＮＫのうちの先頭のアドレス（又は、ＢＬＯＣＫ番号）のＢＡＮＫ（IMAGE BANK 000）はＵｓｅ（使用状態）に設定されているため移動先から除外し、１ＢＡＮＫを単位とする次のアドレス位置（又は、ＢＬＯＣＫ番号位置）に存在する空き状態の１ＢＡＮＫ（IMAGE BANK 001）を対象にして、移動元のＢＬＯＣＫ３の１ＢＡＮＫ（IMAGE BANK 014）を移動させる。このとき、メモリ制御装置２０は、移動元のＢＬＯＣＫ３の１ＢＡＮＫ（IMAGE BANK 014）のＩＤを更新するとともに（「ID＝00000025」→「ID＝00000028」）、移動先のＢＬＯＣＫ０の１ＢＡＮＫ（IMAGE BANK 001）のＩＤを更新する（「ID＝00000001」→「ID＝00000025」）。
【００５６】
次いで、メモリ制御装置２０は、図５（ｃ）に示すように、上述した一連のメモリ領域移動処理において移動元であったＢＬＯＣＫ３について、移動対象となった３ＢＡＮＫ（IMAGE BANK 012〜IMAGE BANK 014）に設定されている状態情報を消去（クリア）して解放し、ＢＬＯＣＫ３内の４ＢＡＮＫ（IMAGE BANK 012〜IMAGE BANK 015）の全てをＥｍｐｔｙ（空き状態）に設定する。ここで、各ＢＡＮＫに設定されている状態情報の更新は、移動処理に伴って各ＢＡＮＫのＩＤを更新する際に同時に実行してもよい。
【００５７】
そして、メモリ制御装置２０は、図５（ｄ）に示すように、ＢＬＯＣＫ３内の４ＢＡＮＫ（IMAGE BANK 012〜IMAGE BANK 015）を１ＢＬＯＣＫ（Num of Chain＝４）に設定して、プログラムで要求されている４ＢＡＮＫ分のデータサイズに応じた記憶領域として確保する（図中、丸数字の「３」）。このとき、メモリ制御装置２０は、確保した４ＢＡＮＫ（IMAGE BANK 012〜IMAGE BANK 015）をＲｅｓｅｒｖｅ（予約状態）に設定するとともにＩＤを更新する（「ID＝00000026」→「ID＝00000029」、「ID＝00000027」→「ID＝00000030」、「ID＝00000028」→「ID＝00000031」、「ID＝00000015」→「ID＝00000032」）。
【００５８】
このように、本実施形態においては、プログラムの実行に伴って要求されているデータサイズ以上を有する２ｎ個の基本容量の記憶領域（ＢＡＮＫ）を、メモリ管理領域の先頭アドレスから２ｎ個の記憶領域（ＢＡＮＫ）を有するブロック領域（ＢＬＯＣＫ）を単位として規定されるアドレス位置を始点とする（又は、２ｎ個の記憶領域（ＢＡＮＫ）を有するＢＬＯＣＫ番号位置の）空き領域から確保するメモリ制御方法を有している。これにより、要求されたデータサイズに対応する記憶領域を、複雑なアドレス計算を行うことなく、簡易な手法を用いて短時間で確保することができる。また、メモリ管理領域内に要求されたデータサイズに応じた空き領域を生成する際に、２ｎ個の記憶領域（ＢＡＮＫ）を単位とするアドレス位置を始点とする（又は、ＢＬＯＣＫ番号位置の）空き領域に移動させるメモリ制御方法を有している。これにより、空き状態の記憶領域を少ない移動回数で集約して、要求されたデータサイズに対応する記憶領域を生成して確保することができる。したがって、プログラムの実行に伴って発生する割当て要求に対して、システムへの負担を軽減しつつ、効率的にメモリ領域を管理することができるので、処理性能（処理速度等）の向上や消費電力の削減を図ることができる。
【００５９】
また、本実施形態は、演算処理部において実行されるプログラムによる割当て要求に基づいて、メモリ制御装置がメモリ部のメモリ管理領域を制御する汎用のコンピュータシステムに適用することができるので、上述したメモリ制御方法を有する制御プログラムをメモリ制御装置に組み込むことにより、システムへの負担を軽減しつつ、効率的にメモリ領域を管理することができる。
【００６０】
＜作用効果の検証＞
次に、上述した本実施形態における作用効果について、比較例を示して具体的に説明する。ここでは、比較例として、要求されたデータサイズに応じたＢＡＮＫを、メモリ管理領域の先頭からアドレスの小さい順に一義的に確保するとともに、メモリ管理領域内に要求されたデータサイズに応じた空き領域を生成する際にも、ＢＡＮＫの移動先をアドレスの小さい順に一義的に設定する手法の一例を示し、本実施形態との違いに基づいて本実施形態の作用効果の優位性について説明する。
【００６１】
図６〜図９は、比較例におけるメモリ制御方法の一例を示す図であり、図１０〜図１２は、本実施形態に係るメモリ制御方法の作用効果を示す説明図である。ここでは、撮像機器のイメージセンサにより取得される撮影データの画像処理において、例えば、ＲＡＷ（生）データであるＢａｙｅｒデータ（撮影データ）を、輝度色素系の色情報であるＹＵＶデータに変換し、さらにＪＰＥＧデータに変換して出力する一連の処理に並行して、撮影を随時行ってＢａｙｅｒデータを順次取得する場合について説明する。
【００６２】
比較例におけるメモリ制御方法においては、図６（ａ）に示すように、１６個の画像データ記憶用のＢＡＮＫ（IMAGE BANK 1〜IMAGE BANK 16）がアドレス順（又は、ＢＬＯＣＫ番号順）に設定されたメモリ管理領域において、まず、初期化により全てのＢＡＮＫ（IMAGE BANK 1〜IMAGE BANK 16）がＥｍｐｔｙ（空き状態）に設定される。次いで、図６（ｂ）〜（ｅ）に示すように、メモリ管理領域の先頭からアドレス（又は、ＢＬＯＣＫ番号）が小さい順に、Ｂａｙｅｒ１、ＹＵＶ(1)、Ｂａｙｅｒ２、Ｄｅｖｅｌｏｐ  ＹＵＶ(1)、Ｂａｙｅｒ３、ＪＰＥＧ(1)の各データを記憶する記憶領域に対応するＢＡＮＫが確保される。具体的には、Ｂａｙｅｒ１は、撮像機器から取得されるＢａｙｅｒデータであって、２ＢＡＮＫ分のデータサイズを有し、メモリ管理領域のIMAGE BANK 1、IMAGE BANK 2が確保される。ＹＵＶ(1)は、画像処理によりＢａｙｅｒ１から変換されるＹＵＶデータであって、４ＢＡＮＫ分のデータサイズを有し、IMAGE BANK 3〜IMAGE BANK 6が確保される。Ｂａｙｅｒ２は、撮像機器から取得されるＢａｙｅｒデータであって、２ＢＡＮＫ分のデータサイズを有し、IMAGE BANK 7、IMAGE BANK 8が確保される。Ｄｅｖｅｌｏｐ  ＹＵＶ(1)は、画像処理によりＹＵＶ(1)から変換される現像用のＹＵＶデータであって、４ＢＡＮＫ分のデータサイズを有し、IMAGE BANK 9〜IMAGE BANK 12が確保される。Ｂａｙｅｒ３は、撮像機器から取得されるＢａｙｅｒデータであって、２ＢＡＮＫ分のデータサイズを有し、IMAGE BANK 13、IMAGE BANK 14が確保される。ＪＰＥＧ(1)は、画像処理によりＤｅｖｅｌｏｐ  ＹＵＶ(1)から変換されるＪＰＥＧデータであって、１ＢＡＮＫ分のデータサイズを有し、IMAGE BANK 15が確保される。
【００６３】
ここで、図６（ｄ）、（ｅ）に示すように、プログラムによる画像処理が完了して不要になったデータ（Ｂａｙｅｒ１、ＹＵＶ(1)）は、順次消去されて当該ＢＡＮＫ（IMAGE BANK 1〜IMAGE BANK 6）が解放されるとともにＥｍｐｔｙ（空き状態）に設定され、アドレス（又は、ＢＬＯＣＫ番号）が小さい順に、新たに撮像機器から取得されたＢａｙｅｒデータ（Ｂａｙｅｒ４）の記憶用に確保される（IMAGE BANK 1、IMAGE BANK 2）。以下同様に、図７〜図９に示すように、アドレスが小さい順に一義的に、撮像機器から取得されるＢａｙｅｒデータ、及び、画像処理により生成される各データ（ＹＵＶデータ、現像用ＹＵＶデータ、ＪＰＥＧデータ）を記憶するためのＢＡＮＫの確保、及び、不要になったデータの消去、ＢＡＮＫの解放を繰り返す。
【００６４】
なお、図６〜図９では、２ＢＡＮＫ分のデータサイズを有するＢａｙｅｒデータとして、Ｂａｙｅｒ１〜Ｂａｙｅｒ８までを取得する際に、メモリ管理領域において確保されるＢＡＮＫの割当ての状態を示している。また、図６〜図９において、「Capt Bayer」はＢａｙｅｒデータの取得処理を示し、「Bayer to YUV」はＢａｙｅｒデータからＹＵＶデータへの変換処理を示し、「YUV to Develop YUV」はＹＵＶデータから現像用のＹＵＶデータへの変換処理を示し、「Develop YUV to JPEG」は現像用のＹＵＶデータからＪＰＥＧデータへの変換処理を示し、「Move Bayer」はＢａｙｅｒデータの移動処理を示す。
【００６５】
このようなメモリ制御方法において、例えば図７（ａ）、（ｂ）又は、図８（ａ）〜（ｄ）、図９（ａ）に示すように、メモリ管理領域の大半のＢＡＮＫが確保されて、空き領域が不足した状態になると、プログラムで要求されているデータサイズに応じた記憶領域を確保することができなくなり、新たなＢａｙｅｒデータの取得や画像処理が滞ることになる。このような場合には、ＢＡＮＫを移動させて空き領域を集約する処理が必要になるが、確保するＢＡＮＫの位置やＢＡＮＫの移動先を、アドレスの小さい順に一義的に設定する比較例の手法においては、要求されているデータサイズに対応した数の連続するＢＡＮＫを確保するために複数回（例えば図８（ａ）〜（ｄ）、図９（ａ）に示した４回）の移動処理を必要とすることになる。そのため、これらのＢＡＮＫの移動処理の間、データの取得や各種の変換処理の実行が不可能となり、システムの処理性能（特に、処理速度）が大幅に低下することになる。
【００６６】
これに対して、本実施形態においては、要求されているデータサイズ以上を有する２ｎ個のＢＡＮＫを、先頭アドレスから２ｎ個のＢＡＮＫ（＝１ＢＬＯＣＫ）を単位とするアドレス位置を始点とする（又は、ＢＬＯＣＫ番号位置の）空き領域から確保し、また、要求されたデータサイズに応じた空き領域を生成する際に、２ｎ個のＢＡＮＫ（＝１ＢＬＯＣＫ）を単位とするアドレス位置を始点とする（又は、ＢＬＯＣＫ番号位置の）空き領域に移動させるメモリ制御方法を有している。これにより、例えば図１０〜図１２に示すように、比較例と同等のＢａｙｅｒデータ（Ｂａｙｅｒ１〜Ｂａｙｅｒ８）の取得や、各種の変換処理を含む画像処理を実行した場合であっても、比較例に示した場合よりも簡易な手法を用いて少ない回数（例えば図１２（ａ）、（ｂ）に示した１回）の移動処理により、要求されているデータサイズに対応した数の連続するＢＡＮＫを確保することができ、迅速に次のデータの取得や各種の変換処理を実行することができる。したがって、本実施形態によれば、プログラムの実行に伴って発生する割当て要求に対して、システムへの負担を軽減しつつ、効率的にメモリ領域を管理することができるので、処理性能（処理速度等）の向上や消費電力の削減を図ることができる。
【００６７】
なお、上述した実施形態においては、本発明に係るメモリ制御装置及びメモリ制御方法を、デジタルカメラ等の撮像機器に適用してイメージセンサから取得した撮影データに所定の画像処理を施す場合について説明したが、本発明はこれに限定されるものではない。本発明は、例えば各種のセンサ機器により長時間かつ継続的に取得されるデータサイズの異なるセンサデータや、処理内容や状況に応じてデータサイズが異なる各種のデータを、限られた容量のメモリ空間内で効率的に管理する際に適するものである。したがって、本発明は、例えば様々なモノをインターネットに接続させて並列的に制御や管理、情報の収集等を行うＩｏＴ（Internet of Things；モノのインターネット）の分野や、そのような分野を含む幅広い範囲で良好に適用することができる。
【００６８】
以上、本発明のいくつかの実施形態について説明したが、本発明は、上述した実施形態に限定されるものではなく、特許請求の範囲に記載された発明とその均等の範囲を含むものである。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
【００６９】
（付記）
［１］
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段と、
前記メモリ部の先頭アドレスから順に、前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態に応じて、前記単位ブロック領域を単位として前記要求されているデータを記憶するための領域を確保する領域確保手段と、
を備えることを特徴とするメモリ制御装置。
【００７０】
［２］
前記メモリ部の前記アドレス位置に前記２ｎ個の空き状態の記憶領域がない場合に、前記単位ブロック領域ごとの前記記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段を、更に備えることを特徴とする［１］に記載のメモリ制御装置。
【００７１】
［３］
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段と、
前記メモリ部において前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段と、
を備えることを特徴とするメモリ制御装置。
【００７２】
［４］
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御方法であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定し、
前記メモリ部の先頭アドレスから順に、前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態に応じて、前記単位ブロック領域を単位として前記要求されているデータを記憶するための領域を確保する、
ことを特徴とするメモリ制御方法。
【００７３】
［５］
前記メモリ部の前記アドレス位置に前記２ｎ個の空き状態の記憶領域がない場合に、前記単位ブロック領域ごとの前記記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる、
ことを特徴とする［４］に記載のメモリ制御方法。
【００７４】
［６］
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御方法であって、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定し、
前記メモリ部において前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる、
ことを特徴とするメモリ制御方法。
【００７５】
［７］
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置の制御プログラムであって、
前記メモリ制御装置を、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段、
前記メモリ部の先頭アドレスから順に、前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態に応じて、前記単位ブロック領域を単位として前記要求されているデータを記憶するための領域を確保する領域確保手段、
として機能させることを特徴とする制御プログラム。
【００７６】
［８］
前記メモリ制御装置を、
前記メモリ部の前記アドレス位置に前記２ｎ個の空き状態の記憶領域がない場合に、前記単位ブロック領域ごとの前記記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段、
として機能させることを特徴とする［７］に記載の制御プログラム。
【００７７】
［９］
プログラムの実行に伴って発生する要求に基づいて、メモリ部にデータを記憶するための領域を動的に確保する制御を行うメモリ制御装置の制御プログラムであって、
前記メモリ制御装置を、
前記プログラムにより要求されているデータのサイズに応じた２ｎ（指数ｎは０以上の整数）個の基本容量を有する記憶領域を、単位ブロック領域として設定するブロック領域設定手段、
前記メモリ部において前記単位ブロック領域を単位として規定されるアドレス位置における前記２ｎ個の記憶領域の空き状態、及び、前記プログラムにおける前記データの参照関係に基づいて、前記メモリ部にすでに確保されている前記２ｎ個の記憶領域を、前記メモリ部の先頭アドレスから順に、前記２ｎ個の記憶領域を単位として規定され、かつ、前記アドレス位置とは重ならない新たなアドレス位置に移動させる領域移動手段、
として機能させることを特徴とする制御プログラム。
【符号の説明】
【００７８】
１０    演算処理部
２０    メモリ制御装置（ブロック領域設定手段、領域確保手段、領域移動手段）
３０    メモリ部
３２    メモリ管理領域（メモリ領域）
【図１】
2020144709.tif 000003
【図２】
2020144709.tif 000004
【図３】
2020144709.tif 000005
【図４】
2020144709.tif 000006
【図５】
2020144709.tif 000007
【図６】
2020144709.tif 000008
【図７】
2020144709.tif 000009
【図８】
2020144709.tif 000010
【図９】
2020144709.tif 000011
【図１０】
2020144709.tif 000012
【図１１】
2020144709.tif 000013
【図１２】
2020144709.tif 000014