(57)【特許請求の範囲】
【請求項１】
コンピュータシステムにおけるメモリブロックを動的に割り当てるためのメモリアロケーション方法であって、
前記コンピュータシステムによってメモリブロックが要求された場合に、空きのメモリブロックを管理する空きリストを検索して、適切なサイズの空きのメモリブロックから要求されたメモリブロックを割り当てる割り当て工程と、
その割り当てに基づいて前記空きリストを更新する工程と、
前記コンピュータシステムによってメモリブロックが解放された場合に、前記空きリストを参照して、解放されたメモリブロックに隣接する空きのメモリブロックが存在するか否かを判定する判定工程と、
解放されたメモリブロックに隣接する１またはそれ以上の空きのメモリブロックが存在する場合に、前記解放されたメモリブロックと当該空きのメモリブロックとを結合して、一の空きのメモリブロックを形成する工程と、
前記解放されたメモリブロックと結合して形成された空きのブロックとに基づいて、前記空きリストを更新する工程と、
を含み、
前記空きリストは、
ヘッダと、空きのメモリブロック毎に設定され、該空きのメモリブロックのアドレス及びサイズの情報を有するノードと、を有するスキップリスト形式のリストであり、
前記ノードは、
前記空きのメモリブロックのサイズ順に前記ノードを連結するサイズ順ポインタ、及び、前記空きのメモリブロックのアドレス順に前記ノードを連結するアドレス順ポインタを、そのノードに設定されたレベル毎に有し、
前記ヘッダは、
前記空きのメモリブロックをサイズ順に検索する場合に最初に参照する前記ノードを示すサイズ順開始ポインタ、及び、前記空きのメモリブロックをアドレス順に検索する場合に最初に参照する前記ノードを示すアドレス順開始ポインタを、レベル毎に有し、
前記割り当て工程では、
前記サイズ順開始ポインタ及び前記サイズ順ポインタを参照して空きのメモリブロックを検索し、
前記判定工程では、
前記アドレス順開始ポインタ及び前記アドレス順ポインタを参照して、解放されたメモリブロックに隣接する空きのメモリブロックを検索することを特徴とするメモリアロケーション方法。
【請求項２】
コンピュータシステムにおけるメモリブロックを動的に割り当てるためのメモリアロケーション装置であって、
メモリブロックが前記コンピュータシステムによって要求された場合に、空きのメモリブロックを管理する空きリストを検索して、適切なサイズの空きメモリブロックから要求されたメモリブロックを割り当てるための割り当て手段と、
メモリブロックが前記コンピュータシステムによって解放された場合に、前記空きリストを参照して、解放されたメモリブロックに隣接する空きのメモリブロックが存在するか否かを判定する判定手段と、
解放されたメモリブロックに隣接する１またはそれ以上の空きのメモリブロックが存在する場合に、前記解放されたメモリブロックと当該空きのメモリブロックとを結合して、一の空きのメモリブロックを形成する結合手段と、
前記割り当てと、前記解放されたメモリブロックと、結合して形成された空きのメモリブロックとに基づいて、前記空きリストを更新する手段と、
を備え、
前記空きリストは、
ヘッダと、空きのメモリブロック毎に設定され、該空きのメモリブロックのアドレス及びサイズの情報を有するノードと、を有するスキップリスト形式のリストであり、
前記ノードは、
前記空きのメモリブロックのサイズ順に前記ノードを連結するサイズ順ポインタ、及び、前記空きのメモリブロックのアドレス順に前記ノードを連結するアドレス順ポインタを、そのノードに設定されたレベル毎に有し、
前記ヘッダは、
前記空きのメモリブロックをサイズ順に検索する場合に最初に参照する前記ノードを示すサイズ順開始ポインタ、及び、前記空きのメモリブロックをアドレス順に検索する場合に最初に参照する前記ノードを示すアドレス順開始ポインタを、レベル毎に有し、
前記割り当て手段は、
前記サイズ順開始ポインタ及び前記サイズ順ポインタを参照して空きのメモリブロックを検索し、
前記判定手段は、
前記アドレス順開始ポインタ及び前記アドレス順ポインタを参照して、解放されたメモリブロックに隣接する空きのメモリブロックを検索することを特徴とするメモリアロケーション装置。
【請求項３】
メモリブロックを動的に割り当てるために、コンピュータを、
メモリブロックが要求された場合に、空きのメモリブロックを管理する空きリストを検索して、適切なサイズの空きメモリブロックから要求されたメモリブロックを割り当てるための割り当て手段、
メモリブロックが解放された場合に、前記空きリストを参照して、解放されたメモリブロックに隣接する空きのメモリブロックが存在するか否かを判定する判定手段、
解放されたメモリブロックに隣接する１またはそれ以上の空きのメモリブロックが存在する場合に、前記解放されたメモリブロックと当該空きのメモリブロックとを結合して、一の空きのメモリブロックを形成する結合手段、
前記割り当てと、前記解放されたメモリブロックと、結合して形成された空きのメモリブロックとに基づいて、前記空きリストを更新する手段、
として機能させるプログラムを記憶した記憶媒体であり、
前記空きリストは、
ヘッダと、空きのメモリブロック毎に設定され、該空きのメモリブロックのアドレス及びサイズの情報を有するノードと、を有するスキップリスト形式のリストであり、
前記ノードは、
前記空きのメモリブロックのサイズ順に前記ノードを連結するサイズ順ポインタ、及び、前記空きのメモリブロックのアドレス順に前記ノードを連結するアドレス順ポインタを、そのノードに設定されたレベル毎に有し、
前記ヘッダは、
前記空きのメモリブロックをサイズ順に検索する場合に最初に参照する前記ノードを示すサイズ順開始ポインタ、及び、前記空きのメモリブロックをアドレス順に検索する場合に最初に参照する前記ノードを示すアドレス順開始ポインタを、レベル毎に有し、
前記割り当て手段は、
前記サイズ順開始ポインタ及び前記サイズ順ポインタを参照して空きのメモリブロックを検索し、
前記判定手段は、
前記アドレス順開始ポインタ及び前記アドレス順ポインタを参照して、解放されたメモリブロックに隣接する空きのメモリブロックを検索することを特徴とする記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムにおけるメモリの動的なアロケーション（メモリの割り当て）に関し、特に、フラグメンテーションのオーバーヘッドを低減する方法及び装置に関する。
【０００２】
【従来の技術】
近年のコンピュータシステムは、処理の間にデータを記憶するためのメモリ空間を得るために、動的メモリアロケーションに大きく依存している。
プログラムは、動的メモリアロケータに多様なサイズのメモリブロックの要求を発行し、それらがもはや要求されなくなると、再使用のためにその後メモリアロケータに戻される。
【０００３】
ダイナミックメモリアロケータは、一般に、システムに代わって新たな要求を満足させ、解放されたブロックが戻される空きのブロックのリストの管理を行う。
【０００４】
動的メモリアロケータは、そのアロケーションがシステムの多数の構成要素によって広範に使用され、コンピュータシステムの中心部を形成し得る。
【０００５】
更に、メモリーのアロケーションは、要求されるシステム全体の性能を発揮させるように効率的に実行されなければならない。
【０００６】
効率的な処理のために、メモリアロケータは、２つの要求を満たさなければならない。すなわち、利用可能なメモリの全体の蓄えを効率的に管理し、また、アロケーション及び解放の要求に迅速に応答しなければならない。
【０００７】
これら２つの要求は、矛盾するものであり、従来のダイナミックメモリアロケータでは、高速にすることと高メモリ効率との間のどこかに位置付けられるアロケーション手法を実行することによって折衷している。
【０００８】
動的なメモリアロケータのメモリ効率は、利用可能なメモリの蓄え全体が効率的に利用される度合いである。
【０００９】
非効率なメモリアロケーション手法は、極端なメモリの要求を招き、膨らんだメモリの要求をまかなうためにシステム全体のコストが増加するか、若しくは、要求されたメモリが利用できない場合にシステムに欠陥を生じる。
【００１０】
個々のシステムにおいて実行されるアロケータのメモリ効率の度合いは、システムによって発行された要求を満たすにはあまりにも小さいフラグメントに分裂したために、利用できないメモリの量によって決定される。
【００１１】
フラグメンテーションは、アロケーション処理の結果としてアロケータ内で内部的に生じる場合や、システムのアロケーションの概要とアロケータのアロケーション手法との組み合わせの結果として外部的に生じる場合もある。
【００１２】
いずれのフラグメンテーションも、システム全体のメモリ効率を低下させる無駄を表している。
【００１３】
メモリアロケーションの要求を迅速に満足させるために、従来の動的メモリアロケータは、通常、いくつかの独立した空きリストを保持しており、メモリブロックはそこからアロケートされる。各々のリストは、要求されたサイズのブロックを空きリスト全体から検索することなく、アロケーションが満足され得るように、固定サイズ又はある範囲のサイズのブロックを含む。
【００１４】
もし、要求されたサイズに対応した空きリストが空であったら、より大きなサイズのリストの一つからのブロックが、該要求を満たすために分裂されなければならなくなり、フラグメンテーションやメモリ効率の低下の要因となる。
【００１５】
固定サイズの空きリストは、一般に用いられており、与えられた空きリストのブロックのサイズは、２のべき乗へ、若しくは、フィボナッチ数列における次の番号、又は他の簡単にコンピュータ処理可能な数列に丸められる。個々のサイズのブロックのためのアロケーションの要求によって戻されたメモリの量は、通常、この丸め込みに伴う内部的フラグメンテーションを含み、システムの残り部分によって利用できないままとなる。
【００１６】
外部的なフラグメンテーションは、アロケータ手法とシステムのアロケーション要求の概要との間の相互作用の結果として生じる。
【００１７】
ブロックは、予測できない順序でシステムによって頻繁にアロケータに戻され、メモリ内において空きブロック間に割り当てられたブロックが点在することとなる。
【００１８】
大きなアロケーションの要求は、利用可能なメモリの合計量がその要求を満たすのに十分あるにも関わらず、満たされない場合がある。これは、空きメモリのまとまった大きなブロックがもはや利用可能でないからである。
【００１９】
アロケータ手法は、更に、アロケータに戻された小さなブロックが結合されて、より大きなサイズの空きリスト上に大きなブロックとして戻される頻度に依存して、外部的フラグメンテーションの一因となり得る。
【００２０】
この結合処理は、通常、多くの計算を要する最新の空きリストの全てのソーティングを必要とし、アロケーションの速度に影響を与える。
【００２１】
この結果、従来のアロケータは、多数の空きリスト上に独立して多くの小さなブロックが記憶されることによって生じる、好ましくない外部的なフラグメンテーションの影響を軽減するために、通常、絶対に必要になるまで結合することを遅延し、又は、ブロックのアロケーション又は解放が、ある回数に至った後に、定期的に結合することを実行している。
【００２２】
従来のアロケータは、多様な手法において、メモリ効率の度合いと速度との調和をとっているが、これは、フラグメンテーションによるメモリ効率の低下を招いている。
【００２３】
動的なメモリアロケータは、また、該アロケータによって内部的に利用される空きリストの情報をどこに記憶するかによって変化する。
【００２４】
内部に記憶するアロケータは、空きブロック自体にこの情報を記憶するものであり、普通、割り当てられたメモリへの高速なデータのパスを有する一般的な目的のシングルプロセッサ又はマルチプロセッサのシステムにおいて用いられる。
【００２５】
外部に記憶するアロケータは、該アロケータによって制御可能なメモリの独立した領域に空きリストに関する情報を記憶するものであり、コプロセッサーのために、メモリをアロケートする場合に、かつ／又は、割り当てられたメモリに対するプロセッサのアクセスが、重大な性能のを与える場合に用いられ得る。
【００２６】
【発明が解決しようとする課題】
本発明は、上記問題点に鑑みてなされたものであり、その目的は、メモリのフラグメンテーションを低減し得る、メモリアロケーション方法及びメモリアロケーション装置並びに記憶媒体を提供することにある。
【００２７】
【課題を解決するための手段】
本発明によれば、コンピュータシステムにおけるメモリブロックを動的に割り当てるためのメモリアロケーション方法であって、前記コンピュータシステムによってメモリブロックが要求された場合に、空きのメモリブロックを管理する空きリストを検索して、適切なサイズの空きのメモリブロックから要求されたメモリブロックを割り当てる割り当て工程と、その割り当てに基づいて前記空きリストを更新する工程と、前記コンピュータシステムによってメモリブロックが解放された場合に、前記空きリストを参照して、解放されたメモリブロックに隣接する空きのメモリブロックが存在するか否かを判定する判定工程と、解放されたメモリブロックに隣接する１またはそれ以上の空きのメモリブロックが存在する場合に、前記解放されたメモリブロックと当該空きのメモリブロックとを結合して、一の空きのメモリブロックを形成する工程と、前記解放されたメモリブロックと結合して形成された空きのブロックとに基づいて、前記空きリストを更新する工程と、を含み、前記空きリストは、ヘッダと、空きのメモリブロック毎に設定され、該空きのメモリブロックのアドレス及びサイズの情報を有するノードと、を有するスキップリスト形式のリストであり、前記ノードは、前記空きのメモリブロックのサイズ順に前記ノードを連結するサイズ順ポインタ、及び、前記空きのメモリブロックのアドレス順に前記ノードを連結するアドレス順ポインタを、そのノードに設定されたレベル毎に有し、前記ヘッダは、前記空きのメモリブロックをサイズ順に検索する場合に最初に参照する前記ノードを示すサイズ順開始ポインタ、及び、前記空きのメモリブロックをアドレス順に検索する場合に最初に参照する前記ノードを示すアドレス順開始ポインタを、レベル毎に有し、前記割り当て工程では、前記サイズ順開始ポインタ及び前記サイズ順ポインタを参照して空きのメモリブロックを検索し、前記判定工程では、前記アドレス順開始ポインタ及び前記アドレス順ポインタを参照して、解放されたメモリブロックに隣接する空きのメモリブロックを検索することを特徴とするメモリアロケーション方法が提供される。
【００２９】
また、本発明によれば、コンピュータシステムにおけるメモリブロックを動的に割り当てるためのメモリアロケーション装置であって、メモリブロックが前記コンピュータシステムによって要求された場合に、空きのメモリブロックを管理する空きリストを検索して、適切なサイズの空きメモリブロックから要求されたメモリブロックを割り当てるための割り当て手段と、メモリブロックが前記コンピュータシステムによって解放された場合に、前記空きリストを参照して、解放されたメモリブロックに隣接する空きのメモリブロックが存在するか否かを判定する判定手段と、解放されたメモリブロックに隣接する１またはそれ以上の空きのメモリブロックが存在する場合に、前記解放されたメモリブロックと当該空きのメモリブロックとを結合して、一の空きのメモリブロックを形成する結合手段と、前記割り当てと、前記解放されたメモリブロックと、結合して形成された空きのメモリブロックとに基づいて、前記空きリストを更新する手段と、を備え、前記空きリストは、ヘッダと、空きのメモリブロック毎に設定され、該空きのメモリブロックのアドレス及びサイズの情報を有するノードと、を有するスキップリスト形式のリストであり、前記ノードは、前記空きのメモリブロックのサイズ順に前記ノードを連結するサイズ順ポインタ、及び、前記空きのメモリブロックのアドレス順に前記ノードを連結するアドレス順ポインタを、そのノードに設定されたレベル毎に有し、前記ヘッダは、前記空きのメモリブロックをサイズ順に検索する場合に最初に参照する前記ノードを示すサイズ順開始ポインタ、及び、前記空きのメモリブロックをアドレス順に検索する場合に最初に参照する前記ノードを示すアドレス順開始ポインタを、レベル毎に有し、前記割り当て手段は、前記サイズ順開始ポインタ及び前記サイズ順ポインタを参照して空きのメモリブロックを検索し、前記判定手段は、前記アドレス順開始ポインタ及び前記アドレス順ポインタを参照して、解放されたメモリブロックに隣接する空きのメモリブロックを検索することを特徴とするメモリアロケーション装置が提供される。
【００３０】
また、本発明によれば、メモリブロックを動的に割り当てるために、コンピュータを、メモリブロックが要求された場合に、空きのメモリブロックを管理する空きリストを検索して、適切なサイズの空きメモリブロックから要求されたメモリブロックを割り当てるための割り当て手段、メモリブロックが解放された場合に、前記空きリストを参照して、解放されたメモリブロックに隣接する空きのメモリブロックが存在するか否かを判定する判定手段、解放されたメモリブロックに隣接する１またはそれ以上の空きのメモリブロックが存在する場合に、前記解放されたメモリブロックと当該空きのメモリブロックとを結合して、一の空きのメモリブロックを形成する結合手段、前記割り当てと、前記解放されたメモリブロックと、結合して形成された空きのメモリブロックとに基づいて、前記空きリストを更新する手段、として機能させるプログラムを記憶した記憶媒体であり、前記空きリストは、ヘッダと、空きのメモリブロック毎に設定され、該空きのメモリブロックのアドレス及びサイズの情報を有するノードと、を有するスキップリスト形式のリストであり、前記ノードは、前記空きのメモリブロックのサイズ順に前記ノードを連結するサイズ順ポインタ、及び、前記空きのメモリブロックのアドレス順に前記ノードを連結するアドレス順ポインタを、そのノードに設定されたレベル毎に有し、前記ヘッダは、前記空きのメモリブロックをサイズ順に検索する場合に最初に参照する前記ノードを示すサイズ順開始ポインタ、及び、前記空きのメモリブロックをアドレス順に検索する場合に最初に参照する前記ノードを示すアドレス順開始ポインタを、レベル毎に有し、前記割り当て手段は、前記サイズ順開始ポインタ及び前記サイズ順ポインタを参照して空きのメモリブロックを検索し、前記判定手段は、前記アドレス順開始ポインタ及び前記アドレス順ポインタを参照して、解放されたメモリブロックに隣接する空きのメモリブロックを検索することを特徴とする記憶媒体が提供される。
【００３１】
なお、スキップリストは、ソートされたデータの集合を記憶するために用いられ、データ処理の技術分野の当業者に広く知られたものである。なお、スキップリストについての詳細は、例えば、「Skip Lists: A Probabilistic Alternative to Balanced Trees」（William Pugh著、1990年6月Communications of the ACM発行 ）に記載されており、その内容は、相互に参照して取り入れられる。
【００３２】
【発明の実施の形態】
以下、本発明の好適な実施の形態について、添付図面を参照して説明する。
【００３３】
図１は、好適な実施形態に係る、メモリアロケータ２と制御されるメモリ４とを含む動的アロケーションシステム１を示している。メモリアロケータ２は、アプリケーションプログラム６からの多様なサイズの空きメモリブロックの要求に対応する。
【００３４】
本実施形態では、アプリケーションプログラムは、図形操作プログラムであり、例えば、画像記録、バッファリング及びプログラムモジュールの記録のためのメモリを要求するものである。しかしながら、本発明は、アロケーションが必要とされるメモリの、いかなる形式のプログラムにも実行し得ることはいうまでもない。
【００３５】
アプリケーションプログラム６又は他のアプリケーションによって使用されるメモリ領域を確保するために、メモリアロケータ２は、リンクされた空きリスト８を管理しており、この空きリスト８は、空きのメモリブロックのアドレス及びサイズを記憶したものである。
【００３６】
本実施形態では、リンクされた空きリスト８は、デュアルスキップリスト構造（dual skip-list structure）を用いて記録されており、リスト上の各々のブロックは、それぞれ異なる順序を有する２つのリストに有効に同時にリンクされる。
一方のリストは、ブロックサイズによって順序付けられたもの（サイズ順リスト）であり、アロケーション要求に対して、最も適切なブロックを迅速に突きとめるために用いられる。
【００３７】
他方のリストは、メモリのアドレスによって順序付けられたもの（アドレス順リスト）であり、ブロックが解放される毎に、結合（merging）が実行され得るように、隣接する空きブロックを迅速に突きとめるために用いられる。
【００３８】
アロケータが、従来のアロケータよりも速く、簡単に、また、エラーが生じないようにするために、ツリーの再調整の必要がない２分ツリーと同様の２分探索処理を提供するスキップリストが用いられる。なお、２分ツリー又は他の関連するデータ構造も、空きリストを実行するために用いることができる。
【００３９】
図２は、空きリスト８の初期の構造を示した図であり、全てのメモリが、空きのメモリブロックＳとして、アロケーションのために利用可能な場合を示したものである。該空きリストは、空きリストのサイズに依存して、１又はそれ以上のヘッダー要素１２を定義するヘッダー１０を含む。
【００４０】
該空きリストは、また、空きのメモリブロック１６を示すノード１４を含み、ノード１４は、ノード要素１８から構成される。ノード１４は、各サイズ順リスト及びアドレス順リストにおけるリストの見だしを表す。
【００４１】
ノード要素１８は、該ノード要素が関連する空きのメモリブロックＳのアドレス２０と、空きメモリブロックＳのサイズ２２（通常、バイト単位である）と、"アドレスによる"ポインタ２４と"サイズによる"ポインタ２６から構成され、動的なサイズを持つ一連の先頭ポインタ（forward pointer）構造と、を含む。
【００４２】
ヘッダー要素１２は、個々のメモリブロックと関連してはおらず、サイズに基づく又はアドレスに基づく検索のための最初の開始ポイントとして用いられる。各々のヘッダー要素１２は、"アドレスによる"ポインタ５２と"サイズによる"ポインタ５４とを含む一連の先頭ポインタ構造を含む。
【００４３】
図２に示す段階では、未だメモリは割り当てられておらず、そのために、対応する一の空きメモリブロックを示す一のノード１４だけが存在していり、"アドレスによる"ポインタ２４と"サイズによる"ポインタ２６とは、"ｎｕｌｌ"ポインタを指している。
【００４４】
図３では、一のメモリアロケーション３０が実行され、アドレスｂとサイズＳとを有する新たな空きメモリブロック３２が解放されており、また、ノード１４は、その新たなアドレスとサイズの詳細を反映するように更新されている。
【００４５】
図４では、メモリアロケーション３４が実行されており、アドレスｂ０又はｂ１、及びサイズＳ０又はＳ１をそれぞれ有する、２つの空きメモリブロック３６及び３８が解放されおり、この結果、ノード要素４０又は４２をそれぞれ有する１番目のノードＮ０と２番目のノードＮ１とが生じている。
【００４６】
ノードＮ０におけるノード要素４０は、関連する空きメモリブロック３６のアドレスｂ０とサイズＳ０に従って、"サイズによる"ポインタ４４と"アドレスによる"ポインタ４６とを含む。同様に、ノードＮ１におけるノード要素４２は、関連する空きメモリブロック３８のアドレスｂ１とサイズＳ１に従って、"サイズによる"ポインタ４８と"アドレスによる"ポインタ５０とを含む。
【００４７】
個々のノード要素における"サイズによる"及び"アドレスによる"ポインタは、同じノードを必ずしも指す必要はない。それらが各々関連するリストが、異なったキーによって順序付けられるためである。
【００４８】
図５Ａ及び図５Ｂには、多数のエントリを持つスキップリスト５８が示されており、該リストは、各々、サイズｓ０、ｓ１、ｓ２、ｓ３、ｓ４及びｓ５を有し、また、アドレスｂ０、ｂ１、ｂ２、ｂ３、Ｍ、及びｂ５における複数の空きメモリブロック６０、６１、６２、６３、６４及び６５を示している。
【００４９】
各々の空きメモリブロック６０乃至６５は、それぞれＮ０，Ｎ１、Ｎ２、Ｎ３、Ｎ４及びＮ５によって示された関連するノードを有する。各々のノードのレベルは、メモリが割り当てられた空きリストが生じる間にランダムに生じる。多くの場合、"サイズによる"ポインタ４４及び４８は、各々のノード要素４０及び４２に関連する"アドレスによる"ポインタ４６及び５０とは異なった要素を指すことが理解されよう。
【００５０】
各々のノードＮ０乃至Ｎ５のサイズは、メモリブロックが空きリストに登録される時に、乱数、又は、擬似乱数の生成手法、若しくは、発見的な数生成手法（heuristic number generation scheme）に基づいて選択される。
【００５１】
どの手法が用いられても、与えられたレベルのノードの相対的な数は、スキップリストの生成に関わる当業者によって理解されるように、予め設定された、若しくは、少なくとも予測可能なパターンに従って選択される。本実施形態では、ランダムモードのレベルを生成するために、確率値ｐとして０．２５を用いている。
【００５２】
本実施形態では、後述するような補足的なメモリブロックアロケーション及び解放処理が実行される。
＜アロケーション処理＞
図６は、本実施形態におけるアロケーション処理を示したフローチャートである。処理は、ステップＳ６０１から開始され、アロケーション要求が発行されると、サイズ順リストが、該要求のサイズに最も近い、次に大きなブロックのために検索される。
【００５３】
検索の間、各々のレベルにおけるサイズ順リスト上における以前のブロックに対するポインタが、効率的にサイズ順リストからブロックを取り去るように記録される。該ブロックは、もはや、フリーでないとみなされるからである。
【００５４】
次のステップＳ６０３では、ブロックが発見されたか否かを判定する。ブロックが発見されなかった場合は、処理は、次のステップＳ６０５へ進み、前記要求が拒否され、処理が終了する。
【００５５】
ブロックが発見された場合は、処理は次のステップＳ６０７へ進み、該ブロックが要求されたサイズか否かが判定される。発見されたブロックのサイズが、正確に一致しない場合は、その余剰部分が、そのサイズに従って、サイズ順リストの適当な位置に戻されることとなる。
【００５６】
一方、余剰部分がない場合（すなわち、発見されたブロックが、要求されたサイズに一致している。）、ステップＳ６１１で、割り当てられたブロックは、後述するようにアドレス順リストから取り去るように、検索を通じて、アドレス順リスト上で発見される。
【００５７】
なお、余剰部分がある場合、該部分は、単にアドレス順リスト上の元のブロックの位置に配置されることが理解されよう。該部分は、隣接するブロックに関しては元のブロックの順番のままだからである。
【００５８】
次に、処理は、ステップＳ６１３へ進み、アロケートすべきブロックが更に存在するならば、処理はステップＳ６０１へ戻る。サイズ順リストにおける全てのブロックが割り当てられたときは、アロケーション処理は終了する。
＜解放処理＞
図７は、本実施形態における解放処理を示すフローチャートである。処理は、ステップＳ７０１から開始され、ブロックが後で再利用するためにアロケータへ解放された場合、アドレス順リストが、該ブロックと結合するための、最も近い隣接する空きのブロックを発見するために検索される。そして、処理は、周辺の空きのブロックが、解放されるブロックのすぐ隣にあるか否かにより異なる。
【００５９】
次のステップＳ７０３では、解放されたブロックのすぐ後のブロックが既に空きか否かを判定する。解放されたブロックのすぐ後のブロックが既に空きである場合は、処理は、ステップＳ７０５へ進み、解放されたブロックのすぐ前のブロックが既に空きか否かを判定する。解放されたブロックのすぐ前のブロックが空きの場合は、ステップＳ７０７において、これら３つのブロックが、新たな一つのブロックに結合され、アドレス順リスト上において、解放されたブロックの前のメモリ上のブロックと置きかえられる。メモリ上の開放されたブロックの後のブロックは、アドレス順リスト及びサイズ順リストの双方から取り去られ、それら３つのブロックの最終的なサイズが、サイズ順リストにおける先のブロックの登録に置き換えて、サイズ順リスト上の適切な新たな位置に挿入される。
【００６０】
一方、解放されたブロックのすぐ後のブロックのみが既に空きである場合は、処理はステップＳ７１１へ進む。ステップＳ７１１では、アドレス順リスト上の登録を置き換えて、新たに解放されたブロックが、その連続したブロックと結合され、その順番は変化しない。連続したブロックは、サイズ順リストから取り去られ、解放されたブロックとの結合の結果生じた新たなサイズでサイズ順リストに再挿入される。
【００６１】
ステップＳ７０３において、解放されたブロックのすぐ後に空きのブロックがない場合、処理はステップＳ７０９へ進み、解放されたブロックのすぐ前のブロックが既に空きか否かを判定する。解放されたブロックのすぐ前のブロックが、既に空きであるだけの場合は、ステップＳ７１３において、アドレス順リスト上の登録を置き換えて、新たに解放されたブロックが、先のブロックと結合される。この場合も、順序は不変である。
【００６２】
ステップＳ７１３でも、先のブロックは、サイズ順リストから取り去られ、解放されたブロックと結合された結果生じた新たなサイズで再び挿入される。
【００６３】
ステップＳ７０９において、解放されたブロックのすぐ前のブロックが、空きではない場合、その後、処理はステップＳ７１５へ進み、新たなリストの登録が作成され、アドレス順リストとサイズ順リストとの双方に挿入される。ステップＳ７１７において、アドレス順リストとサイズ順リストとが更新され、処理は終了する。
【００６４】
図４は、図３から更なるブロックが割り当てられ、１番目のアロケーションが解放された、空きリストの構造を示している。図５Ａ及び図５Ｂは、異なるレベルのノードを含み、多くのアロケーション及び解放の要求がされた後の空きリストの構造を示している。
＜オブジェクトの存在期間＞
外部的なフラグメンテーションは、割り当てられたブロックの存在期間によって多分に影響される。一般的な目的のメモリアロケーションは、通常、外部的なフラグメンテーションを減少するために、アロケーション手法の変更を許容する、外部的なブロックの存在期間について考慮されていない。オブジェクトの存在期間は、予測するにはとても困難である。システムにとって、そのような情報をアロケータに供給することが困難だからである。更に、アロケータ内でこの情報を利用することは、通常、速度の遅延を招く。
【００６５】
本実施形態では、これらの問題は、システムよってオブジェクトの大雑把なライフタイム情報を、動的アロケータで用いるために与えることによって、ある程度改善される。アロケーションの要求は、それらの存在期間が短いと予期されるか長いと予期されるか否かに従って、２つの大きなクラスにグループ化される。その区別は、システムによって半ば独断的に引き出される。
【００６６】
アロケーションの要求を満たすために、空きリストから、より大きなブロックが分配されたとき、返されたブロックは、予想される存在期間に依存して、該より大きな空きブロックの上部又は下部のいずれかを分割する。
【００６７】
システムが、全ての利用可能なメモリを示す一つのブロックと共にスタートすることを考えると、存在期間の短いブロックは、メモリの記憶の一方に区分される傾向にあり、存在期間の長いブロックは、他方に区分される。このことは、性能を落とすことなく、外部的なフラグメンテーションにおいて、重大な１次的減少を与える大雑把なオブジェクトの存在期間のグループ化を提供する。
【００６８】
本実施形態では、オブジェクトの存在期間に関する情報は、ブロックサイズのデータの極性（存在期間が比較的短いと予想されることを示す負の値と、存在期間が比較的長いと予想されることを示す正の値）によってアロケータに渡される。メモリブロックのアロケーションの要求を発行したアプリケーション又はシステムがオブジェクトの存在期間の概念について対応していない場合は、極性ではなく従来の正を示す要求を与えることができる。
＜アライメント＞
多くの場合、オブジェクトは、メモリのアドレッシングに関して、厳格なアライメントの制約を要求する場合がある。
【００６９】
本実施形態では、最も適切なブロックが発見されたポイントからレベル０のサイズリストに沿って検索することによって、ブロックは、不特定多数のアドレスに対して配列される。該検索は、要求されたサイズとアライメントとの双方を備えたブロックが発見されるか、若しくは、係るブロックを生成するために分割しえるブロックが発見された場合に、終了する。本実施形態では、要求されるアライメントは、２のべき乗でなければならない。
【００７０】
なお、本発明を、その好適な実施の形態を参照して説明したが、当業者であれば、他の多くの形式で本発明を実施できることはいうまでもない。例えば、上記実施形態では、空きリストを外部に記録したが、内部に記録して実行することもできる。
【００７１】
なお、図９は、本実施形態において、Ｃ言語で実行される空きリストのノードの構造を示した図である。
【００７２】
このノードは、動的なサイズを持つ構造であり、独立した高速アロケータによりアロケーションを行う。そのサイズは、ノードのレベルに依存し、該構造の最後に存在する先頭ポインターの数に影響を与える。従来のスキップリストと異なるのは、上述した通り、空きリスト上の各ノードが、同時に２つのリスト上に存在することにある。すなわち、リスト上の各ノードは、先頭ポインタの２つのメッシュ化された組を有している。リストを前後して使用される該組は、リストの順序が前後していることに依存する（すなわち、サイズ又はアドレスによって）。
【００７３】
与えられたノードのレベルは、各々のリストで同じであり、該ノードの端の先頭ポインタは、アドレス順リストとサイズ順リストのための一対のポインタからなる。ポインタをメッシュ化することにより、各々のノードにおいて該ノードのレベルを記憶する必要がないことに特徴がある。
【００７４】
上述した好適な方法は、個々の制御フローから構成されるが、本発明の趣旨及び範囲を逸脱することなく、異なる制御フローを用いた多様な方法が考えられる。また、上述した好適な方法の１またはそれ以上のステップは、順次にではなく並行して実行することができる。
【００７５】
メモリブロックの動的なアロケーションの方法は、好ましくは、図８に示されるような汎用コンピュータシステム８００を用いて実行することができ、図１乃至７の処理は、コンピュータシステム８００内で実行されるアプリケーションプログラムのようなソフトウエアとして達成され得る。特に、図６及び７の方法におけるステップは、コンピュータによって実行されるソフトウエア中の命令によって実行される。該ソフトウエアは、２つの独立した部分に分割することができ、その１つは、メモリブロックの動的なアロケーションを実行する部分であり、もう１つは、ユーザとの間のユーザインターフェースを管理するための部分である。該ソフトウエアは、後述する記録装置を含む、コンピュータ可読媒体に記録することができる。例えば、メモリアロケータ２は、ＣＤ−ＲＯＭ上にメモリアロケーションプログラムを記録することによって実現することができる。該ソフトウエアは、コンピュータ可読媒体からコンピュータ内に導入され、該コンピュータによって実行される。そのようなソフトウエアやコンピュータプログラムが記録されたコンピュータ可読媒体は、コンピュータプログラム製品である。本発明の好適な実施形態によれば、コンピュータ上でのコンピュータプログラム製品の使用は、ピクセルに基づく画像のためのピクセルエッジの方向を決定するための有利な装置を実現する。
【００７６】
コンピュータシステム８００は、コンピュータモジュール８０１と、キーボード８０２及びマウス８０３のような入力装置と、プリンタ８１５及びディスプレイ装置８１４を含む出力装置と、からなる。モジュラーデモデュレータ（モデム）送受信装置８１６は、例えば、電話回線８２１又はその他の機能的媒体を介して接続可能な通信網８２０と通信をするために、コンピュータモジュール８０１によって利用される。モデム８１６は、インターネットや、その他のネットワークシステム、例えば、ローカルエリアネットワーク（ＬＡＮ）やワイドエリアネットワーク（ＷＡＮ）にアクセスするために用いることができる。
【００７７】
コンピュータモジュール８０１は、通常、少なくとも一つのプロセッサユニット８０５と、例えば、半導体ランダムアクセスメモリ（ＲＡＭ）やリードオンリーメモリ（ＲＯＭ）から形成されるメモリユニット８０６を備える。メモリユニット８０６は、本実施形態では、制御メモリ４とすることができる。本実施形態の空きリスト８は、ＲＡＭ内に形成される。コンピュータモジュール８０１は、また、通常、ビデオインターフェース３０７を含む入力／出力（Ｉ／Ｏ）インターフェースと、キーボード８０２やマウス８０３或いは付属的にジョイスティック（図示せず）と、モデム８１６のためのインターフェース８０８とを含む。
【００７８】
また、記憶装置８０９が設けられ、この記憶装置８０９は、通常、ハードディスクドライブ８１０やフロッピーディスク８１１を含む。磁気テープドライブ（図示せず）も利用可能である。ＣＤ−ＲＯＭドライブ８１２は、通常、データの不揮発記憶源として設けられる。コンピュータモジュール８０１の構成８０５乃至８１３は、通常、相互に接続されるバス８０４を介して、当業者に知られたコンピュータシステム８００の処理の従来のモードにて、通信する。本実施形態が実施されるコンピュータの例としては、ＩＢＭ−ＰＣ及び互換機、Ｓｕｎ  Ｓｐａｒｃｓｔａｔｉｏｎ、若しくは、同様のコンピュータシステムが含まれる。
【００７９】
本実施形態のアロケーションプログラムは、通常、ハードディスクドライブ８１０に常駐し、その実行においてはプロセッサ８０５によって読み取られ制御される。該プログラムやネットワーク８２０から取り出されたデータの中間的な記憶は、ハードディスクドライブ８１０と協働可能な半導体メモリ８０６を用いることにより達成することも可能である。ある場合ににおいては、アプリケーションプログラムは上述したとおり、ＣＤ−ＲＯＭやフロッピーディスク上に符号化されてユーザに供給されて、対応するドライブ８１２又は８１１を介して読み取られ、もしくは、モデム装置８１６を介してネットワーク８２０からユーザによって読み取られ得る。更に、該ソフトウェアは、磁気テープ、ＲＯＭ、集積回路、光磁気ディスク、コンピュータモジュール８０１と他の装置との間の無線又は赤外線送信路、ＰＣＭＣＩＡのようなコンピュータ可読カード、Ｅ−ｍａｉｌの送信やウエブサイト等に記録された情報を含むインターネット又はイントラネットを含む他のコンピュータ可読媒体からコンピュータシステム８００に導入され得る。なお、これらは、コンピュータ可読媒体の１例に過ぎないことは言うまでもない。他のコンピュータ可読媒体も、本発明の趣旨及び範囲を逸脱することなく使用できることは言うまでもない。
【００８０】
また、上述したメモリブロックの動的なアロケーション方法は、図６及び７の機能又はサブ機能を実行する１又はそれ以上の集積回路のような専用のハードウエアにおいて実行することもできる。そのような専用のハードウエアは、グラフィックプロセッサ、デジタルシグナルプロセッサ、或いは、１又はそれ以上のマイクロプロセッサ、及び、関連するメモリを含むことができる。
【００８１】
上述した説明は、本発明の一部の実施形態に過ぎず、本発明の趣旨及び範囲を逸脱することなく、修正及び／又は変更することも可能であり、上記実施形態は例示であってこれに限定されることはない。
【００８２】
【発明の効果】
以上述べた通り、本発明によれば、フラグメンテーションが低減される。
【図面の簡単な説明】
【図１】ダイナミックメモリアロケータを介して、空きメモリブロックを要求するアプリケーションの概略図である。
【図２】メモリアロケーションが実行される前における関連するメモリの概略と本実施形態に係るメモリの空きリストとを示した図である。
【図３】メモリアロケーションが実行された後における、図２に示したメモリ空きリストと関連するメモリとを示した図である。
【図４】  ２つの隣接しない空きメモリブロックと、図２及び図３に示されたメモリの空きリストと関連するメモリとを示した図である。
【図５Ａ】複数の隣接しない空きのメモリブロックと図２乃至４に示されたメモリの空きリストと関連するメモリとを示した図である（左半分）。
【図５Ｂ】複数の隣接しない空きのメモリブロックと図２乃至４に示されたメモリの空きリストと関連するメモリとを示した図である（右半分）。
【図６】本発明の好適な実施形態におけるアロケーション処理を示したフローチャートである。
【図７】本発明の好適な実施形態における解放処理を示したフローチャートである。
【図８】本発明の好適な実施形態が実行される汎用コンピュータのブロック図である。
【図９】本発明の好適な実施形態において、Ｃ言語で実行される空きリストのノードの構造を示す図である。
【図１】
0004323637.tif 000002
【図２】
0004323637.tif 000003
【図３】
0004323637.tif 000004
【図４】
0004323637.tif 000005
【図５Ａ】
0004323637.tif 000006
【図５Ｂ】
0004323637.tif 000007
【図６】
0004323637.tif 000008
【図７】
0004323637.tif 000009
【図８】
0004323637.tif 000010
【図９】
0004323637.tif 000011