JP5111813B2 - メモリアロケーション方法およびメモリアロケーションプログラム - Google Patents

メモリアロケーション方法およびメモリアロケーションプログラム Download PDF

Info

Publication number
JP5111813B2
JP5111813B2 JP2006245622A JP2006245622A JP5111813B2 JP 5111813 B2 JP5111813 B2 JP 5111813B2 JP 2006245622 A JP2006245622 A JP 2006245622A JP 2006245622 A JP2006245622 A JP 2006245622A JP 5111813 B2 JP5111813 B2 JP 5111813B2
Authority
JP
Japan
Prior art keywords
memory
size
node
address
free
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006245622A
Other languages
English (en)
Other versions
JP2008065764A (ja
Inventor
智幸 岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
GAIA HOLDINGS CORPORATION
Original Assignee
GAIA HOLDINGS CORPORATION
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by GAIA HOLDINGS CORPORATION filed Critical GAIA HOLDINGS CORPORATION
Priority to JP2006245622A priority Critical patent/JP5111813B2/ja
Publication of JP2008065764A publication Critical patent/JP2008065764A/ja
Application granted granted Critical
Publication of JP5111813B2 publication Critical patent/JP5111813B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System (AREA)

Description

本発明は、メモリアロケーション方法およびメモリアロケーションプログラムに関する。
OS、ミドルウェア、アプリケーション実行環境には、アプリケーション等の上位プログラムに対してメモリを提供し、また提供しているメモリおよび空きメモリの管理を行うメモリマネジメントの機能を有しているものがある。その中でも、特にJava(登録商標)アプリケーションを動かすためのJava(R)実行環境では、メモリを提供するメモリアロケーションだけでなく、使用済みメモリを回収するガーベッジコレクション等の機能も実現されており、メモリ管理を全く意識することなくアプリケーションを作成することが可能になっている。
このようなメモリマネジメント機能の実装の一つに、空きメモリをリンクリストで管理し、アプリケーションから所定サイズの空きメモリが要求されると、このリンクリストを低アドレス側または高アドレス側から順に検索し、最初に見付かった所定サイズ以上の空きメモリをアプリケーションに利用させるものが知られている。しかし、このような実装では空きメモリが分散してフラグメンテーションを起こしている場合、無数の空きメモリを辿らなければならず、メモリアロケーションに時間がかかってしまうという問題があった。
このため、メモリマネジメント機能の実装を見直してこれを高速化したいという要望は高かった。しかし、このような実装またはアルゴリズムの見直しによって、アロケートされる空きメモリが変わってしまったり、メモリ利用の形態自体が大きく変わったりすると、既存の実装では発生しなかったエラーが発生する等、アプリケーションの動作に影響を及ぼす可能性がある。例えメモリアロケーションを高速化するという目的を達成できたとしても、既存のアプリケーションの動作に影響を与えるということは、当該アプリケーションのデバッグを行わなければならないことを意味するため、その技術的な価値は必ずしも高くない。
メモリアロケーションを行う方法や装置については、特開2000−112814や特開平8−221318号公報等が提案されているが、上述したように既存の実装と同じ空きメモリを高速にアロケーションする技術は知られていない。
特開2000−112814号公報 特開平8−221318号公報
本発明は、空きメモリをリンクリストで管理し、アプリケーションから所定サイズの空きメモリが要求されると、このリンクリストを低アドレス側または高アドレス側から順に検索し、最初に見付かった所定サイズ以上の空きメモリをアプリケーションに利用させるメモリマネジメント機能の実装において、アロケートされる空きメモリおよびメモリ利用の形態は変えることなく、メモリアロケーションを高速化することができるメモリマネジメント方法およびメモリマネジメントプログラムを提供することを目的とする。
上記課題を解決するために、本発明の第1の観点によれば、所定サイズのメモリ要求に対して、空きメモリを管理する単方向リンクリストを検索して、最初に見付かった所定サイズ以上の空きメモリを返すメモリアロケーション処理を行うメモリアロケーション方法において、
前記メモリアロケーション処理が行われるごとに、メモリ要求により要求されたサイズと、当該メモリ要求に応じて返した空きメモリの次の空きメモリにアクセスするためのアドレスを表す履歴情報とを含むノードを履歴情報とを蓄積し、
新たなメモリ要求がなされた際に、前記各ノードに対し最大サイズを記録したノードから順にアクセスしてその記録サイズを前記新たにメモリ要求されたサイズと比較することにより、前記新たにメモリ要求されたサイズを超えない最大のサイズを記録したノードを選択し、この選択されたノードに記録されたアドレスから前記単方向リンクリストの検索を行うことを特徴とするメモリアロケーション方法が提供される。
このような構成において、前記履歴情報は、返した空きメモリの1つ前の空きメモリのアドレスとすることが好適である。また、メモリ要求されたサイズおよび返した空きメモリの1つ前の空きメモリのアドレスからなるノードは、メモリ要求されたサイズ降順の双方向リンクリストとして管理することができる。この場合には、前記双方向リンクリストに新たなノードを追加することによって、低サイズ側のノードが高サイズ側のノードよりも前記単方向リンクリスト後方を指すようになった場合には、当該高サイズ側のノードを削除することが望ましい。
また、本発明の第2の観点によれば、所定サイズのメモリ要求に対して、空きメモリを管理する単方向リンクリストを検索して、最初に見付かった所定サイズ以上の空きメモリを返すメモリアロケーション処理を、プロセッサに実行させるメモリアロケーションプログラムであって、
前記メモリアロケーション処理が行われるごとに、メモリ要求により要求されたサイズと、当該メモリ要求に応じて返した空きメモリの次の空きメモリにアクセスするためのアドレスを表す履歴情報とを含むノードを蓄積し、
新たなメモリ要求がなされた際に、前記各ノードに対し最大サイズを記録したノードから順にアクセスしてその記録サイズを前記新たにメモリ要求されたサイズと比較することにより、前記新たにメモリ要求されたサイズを超えない最大のサイズを記録したノードを選択し、この選択されたノードに記録されたアドレスから単方向リンクリストの検索を行う処理を、前記プロセッサに実行させることを特徴とするメモリアロケーションプログラムが提供される。
以上のような構成において、前記履歴情報は、返した空きメモリの1つ前の空きメモリのアドレスとすることができる。また、メモリ要求されたサイズおよび返した空きメモリの1つ前の空きメモリのアドレスからなるノードは、メモリ要求されたサイズ降順の双方向リンクリストとして管理することができる。このような場合には、前記双方向リンクリストに新たなノードを追加することによって、低サイズ側のノードが高サイズ側のノードよりも前記単方向リンクリスト後方を指すようになった場合には、当該高サイズ側のノードを削除することが好適である。
本発明のように、所定サイズのメモリ要求に対して、空きメモリを管理する単方向リンクリストを検索して、最初に見付かった所定サイズ以上の空きメモリを返すメモリアロケーションでは、サイズXについてのメモリ要求に対してn番目の空きメモリが返されたとすると、n−1番目以前の空きメモリにはサイズX以上のものは存在しないことになる。そこで本発明は、このような履歴情報を蓄積し、その後にサイズXよりも大きいサイズのメモリ要求がなされた場合、n−1番目の空きメモリからリンクリストを辿って検索を行うようにすることで、空きメモリ検索の時間を大きく短縮し、メモリアロケーションを高速化するものである。しかも、このような高速化では、アロケーションされる空きメモリの位置を変化させないので、アプリケーションに新たなエラーを発生させたり、アプリケーションの動作を変化させたりすることはなく、アプリケーションのデバッグや修正は一切必要がない。
上記において、論理的にはn+1番目から空きメモリを検索するようにしても同様の効果を得ることができるはずだが、この場合n+1番目の空きメモリが存在しない場合の処理を入れる必要があり、この処理が全体のパフォーマンスに悪影響をおよぼす可能性がある。このため、本発明ではn−1番目の空きメモリから単方向リンクリストの検索を行うようにしている。
以下、図面を参照して、本発明の実施の形態について説明する。
以下、添付図面を参照して、本発明の実施の形態について説明する。
図1は、本発明の一実施の形態に係るメモリアロケーション方法を適用したシステム100の構成例である。図1に示されるように、このシステム100は、主としてアプリケーション101と、アプリケーション101が使用するメモリを管理するメモリマネジメントシステム102と、アプリケーション101がメモリマネジメントシステム102を介して利用するメモリ103とから構成されている。ここで、アプリケーション101とメモリマネジメントシステムとは、いずれも所定のプログラムを不図示のプロセッサで実行することにより実現されているものであるが、その機能の一部はハードウェアで実装されていても構わない。
メモリマネジメントシステム102は、アプリケーション101からのメモリ要求に応じてメモリ103のヒープメモリ109からメモリ割り付け(メモリアロケーション)を行うメモリアロケータ104と、ヒープメモリ109から使用済みメモリを回収して必要に応じて使用中メモリのコンパクションを行うガーベッジコレクタ105と、メモリアロケータ104が使用する双方向リンクリスト106とを含んでいる。このようなメモリマネジメントシステム102により、アプリケーション101はメモリ103からメモリ割り付けを受け、アプリケーション101が使用を済ませたメモリは自動的に回収される。すなわち、本実施形態では、アプリケーション101側ではメモリ管理を全く意識する必要がない。なお、図1のヒープ109で、斜線を付した部分は使用中メモリを、斜線を付していない部分は空きメモリをそれぞれ示している(以下も同様)。また、メモリ103にはヒープ109とは別にダミー108が設けられている。ここで、ダミー108はメモリ103上の所定アドレスにかかる領域を指したものである。
図2および図3は、本実施形態におけるヒープ109の空きメモリを管理する機構を説明するための図面である。図2に示すように、ヒープ109に空きメモリ201a,201b,201c,201d,201e,201fが存在する場合、これら空きメモリとダミー108は、図3に示すように単方向リンクリストをなしている。すなわち、ダミー108には最初の空きメモリのアドレスが書き込まれており、各空きメモリ201a,201b,201c,201d,201e,201fは、その先頭に自分のサイズと、次の空きメモリのアドレスが書き込まれている。このような空きメモリ上に単方向リンクリストをなす構成により、メモリアロケータ104は、ダミー108から最初の空きメモリ201aにアクセスしてそのサイズを調べ、さらに次の空きメモリ201bにアクセスしてそのサイズを調べ、以下同様に空きメモリ201c,201d,201e,201fへと、それぞれのサイズを調べつつ低アドレス側から順にアクセスしていくことができる。
従来のメモリアロケーション方法では、上記のように空きメモリを管理しつつ、アプリケーションから所定サイズのメモリ要求がなされた場合には、毎回空きメモリの単方向リンクリストを先頭から辿って、最初に検出された所定サイズ以上の空きメモリにアロケートしていた。本実施形態においても、単方向リンクリストを利用して空きメモリを検索するが、以下に説明する双方向リンクリスト106を併用することにより、空きメモリの検索は大幅に高速化されている。
すなわち、サイズnのメモリ要求がなされた場合に、空きメモリ201dがアロケートされたとすると、より低アドレス側に存在する空きメモリ201a,201b,201cはサイズn未満であることになる。したがって、次に同じサイズnのメモリ要求がなされた場合に、空きメモリ201a,201b,201cを対象から外して検索を行えば、空きメモリ検索のオーバーヘッドを軽減することができる。このような効果は、サイズnよりも大きいメモリ要求がなされた場合にも、同様にして得ることができる。本実施形態は、このような知見に基づいて空きメモリの検索を高速化するものである。
図4は、双方向リンクリスト106のデータ構造を機能的に図示した図面である。この図に示した通り、双方向リンクリスト106は、サイズ、検索履歴、次ノードのアドレスおよび前ノードのアドレスを格納したデータ構造であるノード107a,107b,107c,107dがリンクされたものである。ここで、各ノードはアプリケーション101からのメモリ要求に対してメモリアロケータ104が行った検索結果の履歴を蓄積するものである。すなわち、各ノードのサイズはメモリ要求されたサイズを記録するものであり、履歴情報は当該メモリ要求に対してメモリアロケータ104が返した空きメモリの1個前の空きメモリのアドレスを記録するものである。これらのノードはノード107d,107c,107b,107aとサイズ降順になるようにリンクされている。
ただし、上記にかかわらず、ノード107aはサイズ=1に固定されており、また前記の履歴情報に代えて最初の空きメモリのアドレスを記録したダミー108のアドレスが書き込まれている。また、双方向リンクリスト106外には、メモリアロケータ104が双方向リンクリスト106にアクセスするために、最大サイズにかかるノード107dのアドレスを記録したInitiator110が設けられており、ノード107dには前ノードのアドレスに代えてInitiator110のアドレスが記録されている。
ここで、図4には説明のためにノードの数が4個になった状態を示しているが、後述するように番兵であるノード107a以外のノードは動的に追加/削除され得るものなので、ノードの数はこれに限定されたものではない。
上述のように、本実施形態では、空きメモリに自己のサイズと次の空きメモリのアドレスとを埋め込んでなる単方向リンクリストと、メモリ要求に対してメモリアロケータ104が行った検索結果の履歴を蓄積した双方向リンクリスト106とによりヒープ109上の空きメモリを管理する。図5は、このような空きメモリ管理の態様を概略的に示したものである。
以下、本実施形態におけるメモリアロケーションの処理動作について、図6および図11のフローチャートと、図7〜図10、図12及び図13の概略図とを参照しながら説明する。
まず、図6のフローチャートに沿って、メモリアロケーションがなされるまでの処理を説明する。まず、アプリケーション101から所定サイズのメモリ要求がなされると(ST101)、このメモリ要求に応じて、メモリマネジメントシステム102のメモリアロケータ104が、Initiator110の指すアドレスから双方向リンクリスト106の検索を開始する(ST102)。まず、最初にInitiator110の指す最大サイズにかかるノードにアクセスし、その状態で現在アクセスしているノードのサイズが要求サイズ以下かを判断する(ST103)。
ここで、要求サイズ以下であると判断された場合には、現在のノードに記録されている検索履歴から、空きメモリへのアクセスが行われる(ST104)。現在のノードの検索履歴には、前回同じサイズについて空きメモリ検索して得られたものの一つ前の空きメモリのアドレスが記録されているので、ST104では当該「一つ前の空きメモリ」にアクセスすることになる。一方、現在アクセスしているノードのサイズが要求サイズを超えている場合には、双方向リンクリスト106の次のノードへアクセスし、ST103の判断を繰り返す。ここで、双方向リンクリスト106の末尾には必ずサイズ=1のノードが存在し、これを番兵法の番兵として利用することによって、双方向リンクリストの末端を検出する処理を省略することができる。
ST104で前記「一つ前の空きメモリ」にアクセスした後、メモリアロケータ104は単方向リンクリストに沿って次の空きメモリへアクセスを行い(ST105)、以降は要求サイズ以上の空きメモリを見出すために単方向リンクリストの検索が常法に従って行われる。すなわち、現在アクセスしている空きメモリのサイズが要求サイズ以上であるかを判断し(ST107)、要求サイズ以上であると判断した場合には現在の空きメモリにアロケーションを行い(ST109)、処理は終了する。このようにして、メモリマネジメントシステム102は、アプリケーション101のメモリ要求に対して、現在の空きメモリをアロケートして利用させる。
一方、ST107で要求サイズ未満であると判断した場合には、現在の空きメモリが単方向リンクリストの最後の空きメモリであるか否かを判断し(ST109)、最後の空きメモリではないと判断された場合には、次の空きメモリにアクセスし(ST110)、ST107以下の処理を繰り返す。また、ST108で最後の空きメモリであると判断した場合にはOutOfMemoryエラーを発生させて(ST111)処理を終了する。この場合には、アプリケーション101のメモリ要求に対してエラーが返されて、メモリはアロケーションされない。
次に、以上のような処理によりメモリアロケーションが行われた場合に、上記の処理に引き続いて、双方向リンクリスト106をメンテナンスする処理について図11のフローチャートに沿って説明する。
まず、メモリ要求されたサイズにかかるノードが、双方向リンクリスト206中に存在するかが判断される(ST201)。ここで存在しないと判断された場合には、双方向リンクリスト106に新しいノードを追加する(ST202)。次いで、追加したノードに、メモリ要求されたサイズと、ST109でアロケートした空きメモリの一つ前の空きメモリのアドレスとを書き込む。一方、ST201でメモリ要求されたサイズにかかるノードが存在すると判断された場合には、メモリ要求されたものと同サイズのノードに、アロケートした空きメモリの一つ前の空きメモリのアドレスを書き込む(ST203)。このようなST201からST203までの処理で、双方向リンクリスト106に今回の検索結果が記録される。
ST203またはST204に引き続いて、追加したノードより大サイズのノードに、履歴情報が追加したノードよりも低アドレスのものがあるかを判断する(ST205)。ここで、各ノードは双方向リンクリスト106でサイズ降順に管理されているので、このような判断は追加したノードの一つ前のノードにアクセスして履歴情報を読み出し、現在のノードの履歴情報と比較することにより行うことができる。本実施形態ではノードを双方向リンクリストで管理しており、次ノードのみならず前ノードへのアクセスも簡易に行うことができるため、このような判断は小さいオーバーヘッドで実行することができる。また、一つ前のノードの履歴情報が現在のノードよりも低アドレスであった場合には、さらにもう一つ前のノードについて同じ処理を行うことで、追加したノードよりも低アドレスを指す大サイズのノードを全て特定することができる。
ST205で追加したノードよりも低アドレスのものがあると判断された場合、そのようなノードは双方向リンクリスト106から削除され(ST206)、削除されたノードの前後でリンクが切れないように双方向リンクリスト106がメンテナンスされ(ST207)、処理は終了する。一方、ST205で低アドレスのものがあると判断されなかった場合には、処理はそのまま終了される。このようなST205からST207の処理により、冗長なノードを削除することができる。
〜13は、以上のような処理を概略的に示した図面である。
は、双方向リンクリスト106に1,5,30のノードが保持されている状態を示している。ここでは、ヒープ109上にサイズ1,3,5,4,9,10,3,10,5の空きメモリがこの順で並んでおり、サイズ1にかかるノードはダミー108を指しており、このダミーは最初の空きメモリのアドレスが記録されている。また、サイズ5にかかるノードには検索履歴として2番目の空きメモリのアドレスが記録されており、サイズ5にかかるノードは9番目の空きメモリが記録されている。
ここで、サイズ5のノードは、過去にサイズ5のメモリ要求がなされた際に追加されたものであり、2番目の空きメモリの次にはじめてサイズ5以上の空きメモリが検出されたことを示している。したがって、2番目の空きメモリより低アドレス側には、サイズ5以上の空きメモリは存在しないことになる。サイズ30のノードについても同様である。
は、図に示した状態からサイズ10のメモリ要求がなされた場合の処理を視覚的に説明するための図面である。メモリアロケータ104は、図に矢印を強調して示すように、まずInitiator110から双方向リンクリスト106にアクセスし、最大サイズのノードにアクセスして要求サイズとノードのサイズ(30)を比較し、ノードのサイズが大きいため次のノード(サイズ5)にアクセスし、このノードのサイズが要求サイズより小さいため履歴情報から2番目の空きメモリにアクセスする。それ以降は、矢印で示したように空きメモリの単方向リンクリストを辿って、最初に検出されたサイズ10の空きメモリにアロケーションを行う。
および図10は、以上の検索結果を双方向リンクリストに蓄積する処理を同様に示した図面である。ここでは、双方向リンクリスト106に10のノードが存在しないため、ノードを追加する場合を示す。まず、図10に点線で示すようにノードの領域を確保し、次ノードであるサイズ5のアドレスと、前ノードであるサイズ30のアドレスをそれぞれ書き込んで双方向リンクさせる。次いで、図10に示すように追加したノードにサイズとして10を書き込み、さらに履歴情報として今回アロケーションしたものの一つ前の空きメモリのアドレスを書き込む。最後に、空きメモリのなす単方向リンクリストについて、今回アロケーションしたものをとばすようにメンテナンスを行い、一連の処理は終了する。
本実施形態において、履歴情報として今回アロケーションしたものの一つ前の空きメモリのアドレスを書き込むのは、今回アロケーションした空きメモリ自体はアプリケーション101によって上書きされるため記録する意味が無く、次の空きメモリは存在することが保証されないためである。単方向リンクリストで管理された空きメモリの検索を常法に沿って行うためには、このような履歴情報を記録することが最も好適である。
図12および13は、図11のST205〜207で行う冗長ノードを削除する処理を同様に示した図面である。図12は、サイズ1,5,30,50のノードを有する双方向リンクリスト106に追加されたサイズ10のノードの履歴情報が、サイズ30および50のノードよりも高アドレスを指している状態を示す。ここで、サイズ10のノードの履歴情報が指しているアドレスよりも低アドレスには、サイズ10以上の空きメモリは検出されていないので、サイズ30およびサイズ50のノードが持っている履歴情報は冗長となっている。そこで、本実施形態では図11のST205〜207の処理によって、このようなノードを検出して削除する。図13は、冗長なサイズ30および50のノードを削除した後における双方向リンクリスト106の状態を示す図面である。
以上説明したように、本実施形態によれば、アプリケーションからのメモリ要求に対して、単方向リンクリストで管理された空きメモリを毎回最初から検索するのではなく、以前に空きメモリ検索した結果を記録した履歴情報を利用して、空きメモリの途中から検索を行うので、空きメモリ検索のオーバーヘッドを軽減することができ、これによりメモリアロケーションを高速化することができる。実際に、空きメモリのフラグメントが激しい状態でメモリアロケーションの速度を計測するベンチマークプログラムを準備し、従来のように毎回空きメモリの単方向リンクリストを先頭から検索した場合のベンチマーク結果と、本実施形態で測定したベンチマーク結果とを比較したところ、本実施形態によりメモリアロケーションの速度は40倍程度速くなることが確認された。
しかも、アロケートされる空きメモリは、毎回最初から検索した場合と全く同じものになるので、本実施形態の適用によりこれまで発生しなかったエラーが発生したり、動作が変わったりすることはないので、従来使用していたアプリケーションを修正する必要はない。
ただし、ガーベッジコレクタ105により使用済みメモリを回収した場合、不連続な空きメモリから連続した空きメモリをなすコンパクションを行った場合には(以下GCを行った場合と総称する)、双方向リンクリスト106のノードや履歴情報をメンテナンスする必要が生じる。このようなメンテナンスは行ってもよいが、処理コストに対して得られる効果が割に合わないと判断される場合には、ガーベッジコレクタ105がGCを行う度に双方向リンクリスト106からサイズ=1の番兵以外のノードを削除してリフレッシュするようにしても構わない。これにより、ダミー108が指す最初の空きメモリのアドレスのみアドレス更新を行えば足りるようになるので、そのコストを相応に小さく抑えることが可能となる。
以上、本発明の実施の形態について説明したが、本発明はこれに限定されることなく、その趣旨を逸脱しない範囲で種々の改良・変更が可能であることは勿論である。例えば、上記ではガーベッジコレクタ104を備えた場合を示したが、ガーベッジコレクタ104は本発明に必須な要素ではないので省略しても構わない。また、図6および図7に示したフローチャートは、本発明にかかるメモリアロケーション方法およびメモリアロケーションプログラムを適用した処理の一例を示すものであり、これらに限定されるものではない。具体的には、例えば図6および図7のフローチャートに示した処理をシーケンシャルに行う必要はなく、双方の処理を同時並行的に行うようにしても構わない。
さらに、本明細書中に記載した「空きメモリのアドレス」は、メモリマネジメントシステム102の設計によって所望に取り決めることができ、メモリマネジメントシステム102が空きメモリを利用・管理することができれば、空きメモリの先頭アドレスであっても構わないし、空きメモリの先頭から所定ビットだけ後方のアドレスであっても構わない。
本発明の一実施の形態に係るメモリアロケーション方法を適用したシステムの構成例。 空きメモリを管理する機構を説明するための図面。 空きメモリを管理する機構を説明するための図面。 双方向リンクリストのデータ構造を機能的に図示した図面。 空きメモリ管理の態様を概略的に示した図面。 メモリアロケーションの処理動作を示すフローチャート。 メモリアロケーションの処理動作を示すフローチャート。 本発明の処理を概略的に示した図面。 本発明の処理を概略的に示した図面。 本発明の処理を概略的に示した図面。 本発明の処理を概略的に示した図面。 本発明の処理を概略的に示した図面。 本発明の処理を概略的に示した図面。
符号の説明
100…システム、101…アプリケーション、102…メモリマネジメントシステム、103…メモリ、104…メモリアロケータ、105…ガーベッジコレクタ、106…双方向リンクリスト。

Claims (8)

  1. 所定サイズのメモリ要求に対して、空きメモリを管理する単方向リンクリストを検索して、最初に見付かった所定サイズ以上の空きメモリを返すメモリアロケーション処理を行うメモリアロケーション方法において、
    前記メモリアロケーション処理が行われるごとに、メモリ要求により要求されたサイズと、当該メモリ要求に応じて返した空きメモリの次の空きメモリにアクセスするためのアドレスを表す履歴情報とを含むノードを蓄積し、
    新たなメモリ要求がなされた際に、前記各ノードに対し最大サイズを記録したノードから順にアクセスしてその記録サイズを前記新たにメモリ要求されたサイズと比較することにより、前記新たにメモリ要求されたサイズを超えない最大のサイズを記録したノードを選択し、この選択されたノードに記録されたアドレスから前記単方向リンクリストの検索を行うことを特徴とするメモリアロケーション方法。
  2. 前記履歴情報は、返した空きメモリの1つ前の空きメモリのアドレスであることを特徴とする請求項1に記載のメモリアロケーション方法。
  3. 前記各ノードは、メモリ要求されたサイズ降順に配列された双方向リンクリストとして管理されていることを特徴とする請求項2に記載のメモリアロケーション方法。
  4. さらにまた、前記双方向リンクリストに新たなノードを追加することによって、低サイズ側のノードに記録されたアドレスが高サイズ側のノードに記録されたアドレスよりも前記単方向リンクリスト後方を指すようになった場合には、当該高サイズ側のノードを削除することを特徴とする請求項3に記載のメモリアロケーション方法。
  5. 定サイズのメモリ要求に対して、空きメモリを管理する単方向リンクリストを検索して、最初に見付かった所定サイズ以上の空きメモリを返すメモリアロケーション処理を、プロセッサに実行させるメモリアロケーションプログラムであって、
    前記メモリアロケーション処理が行われるごとに、メモリ要求により要求されたサイズと、当該メモリ要求に応じて返した空きメモリの次の空きメモリにアクセスするためのアドレスを表す履歴情報とを含むノードを蓄積する処理と、
    新たなメモリ要求がなされた際に、前記各ノードに対し最大サイズを記録したノードから順にアクセスしてその記録サイズを前記新たにメモリ要求されたサイズと比較することにより、前記新たにメモリ要求されたサイズを超えない最大のサイズを記録したノードを選択し、この選択されたノードに記録されたアドレスから単方向リンクリストの検索を行う処理
    を、前記プロセッサに実行させるメモリアロケーションプログラム。
  6. 前記履歴情報は、返した空きメモリの1つ前の空きメモリのアドレスであることを特徴とする請求項5に記載のメモリアロケーションプログラム。
  7. 前記各ノードは、メモリ要求されたサイズ降順に配列された双方向リンクリストとして管理されていることを特徴とする請求項6に記載のメモリアロケーションプログラム。
  8. さらにまた、前記双方向リンクリストに新たなノードを追加することによって、低サイズ側のノードに記録されたアドレスが高サイズ側のノードに記録されたアドレスよりも前記単方向リンクリスト後方を指すようになった場合には、当該高サイズ側のノードを削除する処理を、前記プロセッサに実行させることを特徴とする請求項7に記載のメモリアロケーションプログラム。
JP2006245622A 2006-09-11 2006-09-11 メモリアロケーション方法およびメモリアロケーションプログラム Expired - Fee Related JP5111813B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006245622A JP5111813B2 (ja) 2006-09-11 2006-09-11 メモリアロケーション方法およびメモリアロケーションプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006245622A JP5111813B2 (ja) 2006-09-11 2006-09-11 メモリアロケーション方法およびメモリアロケーションプログラム

Publications (2)

Publication Number Publication Date
JP2008065764A JP2008065764A (ja) 2008-03-21
JP5111813B2 true JP5111813B2 (ja) 2013-01-09

Family

ID=39288406

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006245622A Expired - Fee Related JP5111813B2 (ja) 2006-09-11 2006-09-11 メモリアロケーション方法およびメモリアロケーションプログラム

Country Status (1)

Country Link
JP (1) JP5111813B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3627343A1 (en) * 2018-09-19 2020-03-25 censhare AG Efficient in-memory multi-version concurrency control for a trie data structure based database

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221318A (ja) * 1995-02-15 1996-08-30 Seiko Epson Corp メモリのアロケータ及びアロケーション方法
JPH09160823A (ja) * 1995-12-13 1997-06-20 Brother Ind Ltd 電子機器におけるメモリの領域管理制御装置
AUPP638698A0 (en) * 1998-10-06 1998-10-29 Canon Kabushiki Kaisha Efficient memory allocator utilising a dual free-list structure
JP4668562B2 (ja) * 2004-08-02 2011-04-13 株式会社アプリックス メモリマネジメントプログラムおよびメモリマネジメント方法

Also Published As

Publication number Publication date
JP2008065764A (ja) 2008-03-21

Similar Documents

Publication Publication Date Title
JP6014925B2 (ja) メモリ回収方法および装置
KR100843543B1 (ko) 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법
KR101183424B1 (ko) 관리되지 않는 메모리에 대한 콜렉션을 수행하기 위한 방법및 시스템
US20130198437A1 (en) Memory management device and memory management method
US7802070B2 (en) Approach for de-fragmenting physical memory by grouping kernel pages together based on large pages
KR100690804B1 (ko) 휴대단말기의 메모리 정리 방법
KR100526178B1 (ko) 플래시 메모리 액세스 장치 및 방법
CN1130641C (zh) 具有永久性存储器的可恢复磁盘控制系统
US9645922B2 (en) Garbage collection in SSD drives
CN108431783B (zh) 访问请求处理方法、装置及计算机系统
US7543124B1 (en) Method for preventing page replacement of unreferenced read-ahead file pages
US5761501A (en) Stacked skip list data structures
CN102567184A (zh) 一种基于Flash的日志存储方法
CN110945486B (zh) 一种存储碎片管理方法及终端
CN108829342B (zh) 一种日志存储方法、系统及存储装置
JP5776474B2 (ja) ストレージ装置、ストレージ制御装置およびコピー先データアクセス方法
CN114265670B (zh) 一种内存块整理方法、介质及计算设备
US20130304972A1 (en) Control device, storage device, and storage control method
US6804762B1 (en) Method and system for garbage collection using a dynamically tuned write barrier
CN114490443A (zh) 一种基于共享内存的golang进程内缓存方法
JP5111813B2 (ja) メモリアロケーション方法およびメモリアロケーションプログラム
CN111694806B (zh) 一种事务日志的缓存方法、装置、设备和存储介质
JPH05210584A (ja) 改善されたぺージングを有するディジタルデータプロセッサ
JPH039494B2 (ja)
CN116088862A (zh) 一种对于数据缓存的方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090901

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120314

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120327

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120523

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120529

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120911

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121010

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151019

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees