(57)【要約】オブジェクトのためのメモリ管理を提供するための方法が説明される。具体的には、異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するための技術およびメモリ管理ツリーで特定のオブジェクトで開始するメモリ管理の下位ツリーを解放するための技術が説明される。メモリ管理テンプレートは共通のプリプロセッサメモリ管理コードを提供する。メモリ管理テンプレートの特別なバージョンは特別なテンプレートのサブクラスを作成するために使用される。特別なテンプレートのサブクラスのインスタンスであるオブジェクトのメモリ管理オペレータが起動されると、特別なテンプレートで共通のメモリ管理コードが実行される。メモリは階層的なツリーで各オブジェクトと関連付けられる。オブジェクト間の階層的なツリーの関係を反映するデータがメモリに対して維持される。下位ツリーおよび関連付けられるメモリは、関係を追跡するアプリケーションプログラムなしに解放することができる。
2005531050.tif 000002
【特許請求の範囲】
【請求項１】
階層的なツリーの関係を有するオブジェクトのセットと関連付けられるメモリを解放する方法であって、前記方法はコンピュータで実現されるステップを含み、前記コンピュータで実現されるステップは、
前記階層的なツリーの関係を有する前記オブジェクトのセットを作成するステップと、
各オブジェクトに対してメモリを割当てるステップと、
各オブジェクトに対する前記メモリ間の関係を規定するデータを維持するステップとを含み、
前記データは前記階層的なツリーの関係の組織を反映し、前記コンピュータで実現されるステップはさらに、
オブジェクトと関連付けられるメモリを解放するための要求を受取るステップと、
前記要求を受取ることに応答して、
どのメモリが前記オブジェクトの子孫である１つまたは複数のオブジェクトと関連付けられるかを決定するために前記データにアクセスするステップと、
前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップとを含む、方法。
【請求項２】
前記階層的なツリーの関係の頂点にあるオブジェクトと関連付けられるメモリはヒープであり、前記階層的なツリーの関係で残りのオブジェクトと関連付けられるメモリは前記ヒープのサブヒープであり、前記割当てるステップは、
前記階層的なツリーの関係で前記頂点にあるオブジェクトに対して前記ヒープを割当て、かつ前記残りのオブジェクトに対して前記ヒープの前記サブヒープを割当てるステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記関係を規定する前記データは子および兄弟のポインタの対を含み、
前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定する前記子および兄弟のポインタの対を維持するステップをさらに含み、
前記データにアクセスするステップは、
前記オブジェクトの子孫である前記１つまたは複数のオブジェクトを決定するために前記子および兄弟のポインタの対にアクセスするステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記割当てるステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記メモリ管理実行ファイルは新規のオペレータであり、前記割当てるステップは、
前記新規のオペレータを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項４に記載の方法。
【請求項６】
前記解放するステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記メモリ管理実行ファイルは削除のオペレータであり、前記解放するステップは、
前記削除のオペレータを起動することによって、前記オブジェクトと関連付けられるメ
モリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項６に記載の方法。
【請求項８】
前記解放するステップは、
単一の要求を起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリの解放を行なわせるステップをさらに含む、請求項６に記載の方法。
【請求項９】
前記単一の要求は前記オブジェクトに対するデストラクタであり、前記解放するステップは、
前記デストラクタを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
特定のオブジェクトに対するメモリはファクトリメソッドで作成され、前記割当てるステップは、
前記特定のオブジェクトに対して前記ファクトリメソッドで前記メモリを割当てるステップをさらに含む、請求項１に記載の方法。
【請求項１１】
前記関係を規定する前記データの少なくとも一部分はファクトリメソッドで維持され、前記データを維持するステップは、
前記特定のオブジェクトに対するメモリと前記残りのオブジェクトに対するメモリとの間の関係を規定する前記データの少なくとも前記一部分の維持は前記ファクトリメソッドで行なわれるステップをさらに含む、請求項１に記載の方法。
【請求項１２】
前記データは子および兄弟のポインタの対を含み、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の関係を規定する前記子および兄弟のポインタの対を維持するステップをさらに含む、請求項１に記載の方法。
【請求項１３】
前記データは前記オブジェクトのセットのデータメンバで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために前記データメンバを維持するステップをさらに含む、請求項１に記載の方法。
【請求項１４】
前記データは各オブジェクトに対する前記メモリで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために各オブジェクトに対する前記メモリで前記データを維持するステップをさらに含む、請求項１に記載の方法。
【請求項１５】
階層的なツリーの関係を有するオブジェクトのセットと関連付けられるメモリを解放するための命令の１つまたは複数のシーケンスを運ぶコンピュータ読取可能な媒体であって、１つまたは複数のプロセッサによる前記命令の１つまたは複数のシーケンスの実行は、前記１つまたは複数のプロセッサに以下のステップを行なわせ、前記以下のステップは、
前記階層的なツリーの関係を有する前記オブジェクトのセットを作成するステップと、
各オブジェクトに対してメモリを割当てるステップと、
各オブジェクトに対する前記メモリ間の関係を規定するデータを維持するステップとを含み、前記データは前記階層的なツリーの関係の組織を反映し、前記以下のステップはさらに、
オブジェクトと関連付けられるメモリを解放するための要求を受取るステップと、
前記要求を受取ることに応答して、
どのメモリが前記オブジェクトの子孫である１つまたは複数のオブジェクトと関連付けられるかを決定するために前記データにアクセスするステップと、
前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップとを含む、コンピュータ読取可能な媒体。
【請求項１６】
前記階層的なツリーの関係の頂上にあるオブジェクトと関連付けられるメモリはヒープであり、前記階層的なツリーの関係で残りのオブジェクトと関連付けられるメモリは前記ヒープのサブヒープであり、前記割当てるステップは、
前記階層的なツリーの関係で前記頂上にある前記オブジェクトに対して前記ヒープを割当て、かつ前記残りのオブジェクトに対して前記ヒープの前記サブヒープを割当てるステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項１７】
前記関係を規定する前記データは子および兄弟のポインタの対を含み、
前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定する前記子および兄弟のポインタの対を維持するステップをさらに含み、
前記データにアクセスするステップは、
前記オブジェクトの子孫である前記１つまたは複数のオブジェクトを決定するために前記子および兄弟のポインタの対にアクセスするステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項１８】
前記割当てるステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項１９】
前記メモリ管理実行ファイルは新規のオペレータであり、前記割当てるステップは、
前記新規のオペレータを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項１８に記載のコンピュータ読取可能な媒体。
【請求項２０】
前記解放するステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項２１】
前記メモリ管理実行ファイルは削除のオペレータであり、前記解放するステップは、
前記削除のオペレータを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項２０に記載のコンピュータ読取可能な媒体。
【請求項２２】
前記解放するステップは、
単一の要求を起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリの解放を行なわせるステップをさらに含む、請求項２０に記載のコンピュータ読取可能な媒体。
【請求項２３】
前記単一の要求は前記オブジェクトに対するデストラクタであり、前記解放するステップは、
前記デストラクタを起動することによって、前記オブジェクトと関連付けられるメモリ
および前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項２２に記載のコンピュータ読取可能な媒体。
【請求項２４】
特定のオブジェクトに対するメモリはファクトリメソッドで作成され、前記割当てるステップは、
前記特定のオブジェクトに対して前記ファクトリメソッドで前記メモリを割当てるステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項２５】
前記関係を規定する前記データの少なくとも一部分はファクトリメソッドで維持され、前記データを維持するステップは、
前記特定のオブジェクトに対するメモリと前記残りのオブジェクトに対するメモリとの間の関係を規定する前記データの少なくとも前記一部分の維持は前記ファクトリメソッドで行なわれるステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項２６】
前記データは子および兄弟のポインタの対を含み、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定する前記子および兄弟のポインタの対を維持するステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項２７】
前記データは前記オブジェクトのセットのデータメンバで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために前記データメンバを維持するステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項２８】
前記データは各オブジェクトに対する前記メモリで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために各オブジェクトに対する前記メモリで前記データを維持するステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
この出願は、Mohammad Shoaib Lari、Ravikanth Kasamsetty、およびSrinath Krishnaswamyによる「オブジェクトをプログラミングするための簡略化されたメモリの割当ての取消（"Simplified Deallocation of Memory for Programming Objects"）」と題される、２００２年５月７日に出願された米国仮特許出願連続番号第６０／３７８，８７１号に関連し、それからの優先権を主張し、ここに十分に説明されるかの如くその開示全体をここに引用により援用する。この出願は、Mohammad Shoaib Lari、Ravikanth Kasamsetty、およびSrinath Krishnaswamyによる「オブジェクトをプログラミングするための簡略化されたメモリの割当ての取消（"Simplified Deallocation of Memory for Programming Objects"）」と題される、２００２年５月３１日に出願された米国仮特許出願連続番号第６０／３８４，６４６号に関連し、それからの優先権を主張し、ここに十分に説明されるかの如くその開示全体をここに引用により援用する。
【０００２】
発明の分野
この発明はオブジェクトのためのメモリ管理に関し、特に、異なるクラスであるインスタンスであるオブジェクトへの共通のメモリ管理コードの提供、およびオブジェクトの階層で特定のオブジェクトと関連付けられるメモリおよび階層でその特定のオブジェクトの下にあるオブジェクトを解放することに関する。
【背景技術】
【０００３】
発明の背景
メモリの管理は、メモリの割当および割当の取消を管理してオブジェクトまたは他のデータ構造を記憶するために行なわれる動作およびプロセスを指す。典型的には、大抵のアプリケーションは、そのアプリケーションが書かれるコンピュータ言語によって供給されるメモリ管理コードを使用する。しかしながら、コンピュータ言語によって供給されるメモリ管理コードは、性能のための最適化、メモリの割当のための最適化または互いに関係を有するオブジェクトのセットに対するメモリを解放することなどの或る望ましい特徴を有さないことがある。したがって、オブジェクトが自分自身のメモリ管理コードを有すると有利である。
【０００４】
オブジェクト指向の世界では、一意のメモリ管理コードをアプリケーションに供給することには、そのアプリケーションでオブジェクトを作成するために使用されるすべてのクラスで新規のオペレータおよび削除のオペレータをオーバーライドすることが伴う。このことに関する問題は、アプリケーションでオブジェクトを作成するために使用される各クラスは、それらのクラスで新規のオペレータおよび削除のオペレータをオーバーライドするためにメモリ管理コードの別々のコピーを必要とするという点である。メモリ管理コードの多くのコピーを有すると、日常のメンテナンスが複雑になるだけでなく、強化を行なうのも複雑になる。たとえば、メモリ管理コードにバグが見つかるたびに、各クラスでメモリ管理コードを修正しなくてはならない。
【０００５】
オブジェクトのセット間に或る関係があるとき、アプリケーションプログラムは、オブジェクトと関連付けられるメモリを適切な順番で解放するために、これらオブジェクト間の関係を追跡しなくてはならない。たとえば、所与のデータベース接続では、１つまたは複数の照会がステートメントを伴って実行され、照会に応答して結果セットが戻される。したがって、データベース接続、関連するステートメント、結果セットおよびストリーム
の間に階層的な関係が存在する。接続および関連するステートメント、結果セットおよびストリームは、各々それら自身のオブジェクトによって表現することができ、これらオブジェクトは、これらオブジェクト間の関係を反映する階層的なツリーに組織化することができる。たとえば、接続オブジェクトは階層的なツリーの頂点のオブジェクトであり、ステートメントオブジェクトは接続オブジェクトのすぐ下のオブジェクトであり、結果セットオブジェクトはステートメントオブジェクトのすぐ下にある、等である。とりわけ、オブジェクトと関連付けられるメソッドを実行するため、またはオブジェクトのために計算を行なうためにメモリが必要とされる。したがって、メモリは階層的なツリー（以降は、「メモリ管理ツリー」と称される）で各オブジェクトと関連付けられる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特定のオブジェクトおよびそのオブジェクトの下にあるオブジェクトは階層的なツリーの下位ツリーを形成する。たとえば、特定のステートメントオブジェクト、および、たとえば、結果セットオブジェクトおよびストリームオブジェクトなどのその特定のステートメントオブジェクトの下にあるすべてのオブジェクトは、階層的なツリーの下位ツリーを形成する。下位ツリー、および下位ツリーでオブジェクトと関連付けられるメモリは、メモリ管理の下位ツリーを形成する。特定のオブジェクトが必要とされなくなると、その特定のオブジェクトを含むメモリ管理の下位ツリー、この特定のオブジェクトの下にあるオブジェクト（以降は、特定のオブジェクトの「子孫」と称される）、およびこれらオブジェクトのすべてと関連付けられるメモリが解放される。たとえば、一旦アプリケーションプログラムがステートメントオブジェクトで終了されると、ステートメントオブジェクトおよびそのステートメントオブジェクトの子孫のすべて（たとえば、結果セットオブジェクトおよびストリームオブジェクト）は解放することができる。これらオブジェクトと関連付けられるメモリも解放することができる。これを行なうには、アプリケーションプログラムは、オブジェクトと関連付けられるメモリとの間の関係を追跡しなければならない。メモリ管理の下位ツリーの解放は、階層的なツリー内の他のオブジェクトおよびそれらの関連付けられるメモリが解放されないように行なわれる必要がある。たとえば、特定のステートメントで開始する下位ツリーが解放される場合、この特定のステートメントが関連付けられる接続およびその接続と関連付けられる他のステートメントは影響されてはならない。
【０００７】
したがって、アプリケーションプログラムのための一意のメモリ管理コードを提供する必要があるだけでなく、このメモリ管理コードがそのアプリケーションで使用されるクラスのインスタンスであるすべてのオブジェクトによって共有されるように提供する必要もあることがわかる。さらに、アプリケーションプログラムに対して透過的な態様で階層的なツリーのオブジェクトのセットとこれらオブジェクトと関連付けられるメモリとの間の関係を追跡する必要もあることがわかる。そうする中で、アプリケーションプログラムは、階層的なツリー内の１つの特定のオブジェクトに対して解放を発行することができ、これは結果として、その特定のオブジェクトで開始するメモリ管理の下位ツリーを解放することになる。
【課題を解決するための手段】
【０００８】
発明の概要
オブジェクトのためのメモリ管理を提供するための技術が説明される。特に、異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するための技術、およびメモリ管理のツリー内で特定のオブジェクトで開始するメモリ管理の下位ツリーを解放するための技術が説明される。
【０００９】
オブジェクトのための共通のメモリ管理の提供については、テンプレート（以降は、メ
モリ管理テンプレートと称される）は共通のプリプロセッサメモリ管理コードを提供するために使用される。メモリ管理インターフェイスを規定する抽象クラスは、コンパイル中に「特別なテンプレート」を作成するためにこのメモリ管理テンプレートに渡される。特別なテンプレートは、第２のクラスを下位に分類するために使用される（以降は「特別なテンプレートサブクラス」と称される）。特別なテンプレートのサブクラスは、コンパイル時間中に共通のプリプロセッサメモリ管理コードから生成されるメモリ管理実行ファイルを含む。一実施例によると、特別なテンプレートのサブクラスは抽象クラスでインターフェイスに対するインプリメンテーションを提供する。特別なテンプレートのサブクラスのインスタンスであるオブジェクトの、新規または削除などのメモリ管理オペレータが起動されと、特別なテンプレート内のメモリ管理実行ファイルが実行される。
【００１０】
たとえば、抽象クラスＡ＿Ａｂｓはインターフェイスを提供する。テンプレートＭＭ＜Ｔ＞は、新規および削除のオペレータをオーバーロードすることによって共通のメモリマネージャに対してインターフェイスおよびインプリメンテーションを提供する共通のプリプロセッサメモリ管理コードを提供する。Ａ＿ＡｂｓがテンプレートＭＭ＜Ｔ＞の一般的なパラメータ「Ｔ」に渡されると、特別なテンプレート、ＭＭ＜Ａ＿Ａｂｓ＞が作成される。コンパイルのプリプロセッサ段階では、一般的なパラメータＴは特定されたパラメータＡ＿Ａｂｓで置換され、特定されたテンプレートＭＭ＜Ａ＿Ａｂｓ＞で実行可能なコードを生成する。ＭＭ＜Ａ＿Ａｂｓ＞は、Ａ＿ＳＴＳを下位に分類するために使用され、これは特別なテンプレートのサブクラスである。クラスＡ＿ＳＴＳのインスタンスであるオブジェクトの新規または削除のオペレータが起動されると、ＭＭ＜Ａ＿Ａｂｓ＞内の新規または削除のオペレータは、コンピュータ言語によって供給される新規または削除のオペレータの代わりに実行される。
【００１１】
メモリ管理の下位ツリーの解放に関しては、メモリは階層的なツリーで各オブジェクトと関連付けられる。階層的なツリーでのオブジェクト間の階層的なツリーの関係を反映するデータがメモリのために維持される。そうする中で、下位ツリーおよび関連付けられるメモリは、オブジェクトとオブジェクトと関連付けられるメモリとの間の関係を追跡するアプリケーションプログラムなしに、デストラクタなどの単一の命令で解放することができる。
【００１２】
この発明は、同様の参照番号が類似の要素を示す添付の図面の中で、限定ではなく例によって示される。
【発明を実施するための最良の形態】
【００１３】
発明の詳細な説明
オブジェクトに共通のメモリ管理コードを提供するための方法である。以下の説明では、説明のため、多くの具体的な詳細を説明してこの発明を完全に理解できるようにしている。しかしながら、この発明は、これらの具体的な詳細な詳細なしに実現可能であることは明らかである。場合によっては、この発明を不必要にわかりにくくするのを避けるために、ブロック図の形で周知の構造および装置を示す。
【００１４】
共通のメモリ管理で使用されるクラスの階層の概要
図１は、この発明の実施例による異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するためにメモリ管理テンプレートを使用する３つのクラスの階層（class hierarchy）を示すブロック図である。３つのクラスの階層、クラスの階層１、クラスの階層２およびクラスの階層３内のクラスはすべて１つの形または別の形でコードを提供する。コードを提供することは、後続のコンパイルおよび実行のためにコードを作成するプロセスまたは動作を指す。たとえば、プログラマは、クラスの形でファイルにソースを入力することによってコードを提供し、それはコンパイルのためにコンパイ
ラによってアクセス可能である。コードを提供することは、ライブラリを参照する他のアプリケーションの後のコンパイルのためにコードをライブラリに記憶することも指す。
【００１５】
３つのクラスの階層は、３つの特別なテンプレートのサブクラス、Ａ＿ＳＴＳ：ＭＭ＜Ａ＿Ａｂｓ＞１３０、Ｂ＿ＳＴＳ：ＭＭ＜Ｂ＿Ａｂｓ＞１６０およびＣ＿ＳＴＳ：ＭＭ＜Ｃ＿Ａｂｓ＞１９０のインスタンスであるオブジェクトを作成するために使用される（これら特別なテンプレートのサブクラスの表記は次の順序である：１）クラスの名前、２）コロン、３）クラスを下位に分類するために使用される特別なテンプレートの名前）。Ａ＿ＳＴＳ：ＭＭ＜Ａ＿Ａｂｓ＞１３０の場合、Ａ＿ＳＴＳはオブジェクトを作成するために使用されるクラスの名前であり、ＭＭ＜Ａ＿Ａｂｓ＞は、後にさらに詳しく説明するように特別なテンプレートのサブクラスの名前である。これらオブジェクトは、後にさらに詳しく説明するように、メモリ管理テンプレートからの共通のプリプロセッサメモリ管理コードからすべて生成されるメモリ管理実行ファイルを含む。
【００１６】
各クラスの階層の頂点にあるのは、抽象クラス、Ａ＿Ａｂｓ１１０、Ｂ＿Ａｂｓ＿１４０およびＣ＿Ａｂｓ１７０であり、特別なテンプレートのサブクラス（１３０、１６０、１９０）で実現されるメソッド（１３１、１３２、１６１、１６２、１９１）に対するインターフェイス（１１３、１１４、１４３、１４４、１７３）を提供する。定義によると、抽象クラスは方法および／またはオペレータに対してインターフェイスを規定するが、方法および／またはオペレータに対してインプリメンテーションは提供しない。
【００１７】
新規および削除のオペレータに対する共通のプリプロセッサメモリ管理コードはメモリ管理テンプレートで提供される。メモリ管理テンプレートはＭＭ＜Ｔ＞と称され、Ｔは特定の種類をメモリ管理テンプレートに渡すための一般的な種類のパラメータである。コンパイルのプリプロセッサ段階中に、（１）一般的な種類のパラメータＴは、メモリ管理テンプレートに渡される特定の種類（たとえば、Ａ＿Ａｂｓ、Ｂ＿Ａｂｓ、Ｃ＿Ａｂｓ）で置換され、（２）メモリ管理プレートが複製され、（３）メモリ管理テンプレートの複製は一般的なパラメータＴに渡された特定の種類を使用して特別化され、特別なテンプレート（１２０、１５０、１８０）を生成する。たとえば、特別なテンプレートＭＭ＜Ａ＿Ａｂｓ＞１２０では、抽象クラスＡ＿Ａｂｓ１１０は一般的なパラメータＴに渡された特定の種類である。
【００１８】
したがって、各特別なテンプレート（１２０、１５０および１８０）はそれ自身のメモリ管理実行ファイル（１２１、１２２、１５１、１５２、１８１、１８２）を有し、これらはメモリ管理テンプレート内のメモリ管理プリプロセッサコードの１つのコピーに端を発する。たとえば、新規（new）１２１および削除（delete）１２２は、ＭＭ＜Ａ＿Ａｂｓ＞１２０自身のメモリ管理実行ファイルである。同様に、特別なテンプレート（１２０、１５０、１８０）は、データを記憶するために使用されるhndlp＿（１２３、１５３および１８３）などのそれら自身のデータメンバのコピーを有する。
【００１９】
ＭＭ＜Ａ＿Ａｂｓ＞１２０、ＭＭ＜Ｂ＿Ａｂｓ＞１５０およびＭＭ＜Ｃ＿Ａｂｓ＞１８０は、各々、結果として別のクラス（１３０、１６０、１９０）を下位に分類するために使用可能な別々の特別なテンプレートになるが、メモリ管理プリプロセッサコードの１つのコピーのみが存在する。したがって、維持または強化するためのメモリ管理プリプロセッサコードの１つのコピーのみがある。メモリ管理プリプロセッサコードのその１つのコピーは、以下にさらに詳しく説明するように、メモリ管理テンプレートにある。
【００２０】
一実施例によると、１つのみの特別なテンプレートおよび１つの抽象クラスが提供される。たとえば、一般的なメモリ管理の抽象クラス、ＭＭ＿Ａｂｓは、任意の種類のオブジェクトを作成するためのインターフェイスなどの一般的なインターフェイスを提供するた
めにのみ使用され、クラスの階層１、２および３で抽象クラスとして使用される。次に、特別なテンプレート１２０、１５０、１８０は、すべて、ＭＭ＜ＭＭ＿Ａｂｓ＞であり、特別化なテンプレートのサブクラスは、Ａ＿ＳＴＳ：ＭＭ＜ＭＭ＿Ａｂｓ＞１３０、Ｂ＿ＳＴＳ：ＭＭ＜ＭＭ＿Ａｂｓ＞１６０、およびＣ＿ＳＴＳ：ＭＭ＜ＭＭ＿Ａｂｓ＞１９０である。
【００２１】
特別なテンプレート（１２０、１５０、１８０）は、特別なテンプレートのサブクラス（１３０、１６０、１９０）を作成するために使用される。一実施例によると、特別なテンプレートのサブクラス（１３０、１６０、１９０）は、メソッド（１３１、１３２、１６１、１６２、１９１）で抽象クラス（１１０、１４０、１７０）の非メモリ管理インターフェイス（１１３、１１４、１４３、１４４、１７３）を実現する。たとえば、ＭＭ＜Ａ＿Ａｂｓ＞１２０は、Ａ＿ＳＴＳ：ＭＭ＜Ａ＿Ａｂｓ＞１３０を下位に分類するために使用される。非メモリ管理インターフェイス１１３および１１４は、後にさらに詳細に説明するようにメソッド１３１および１３２で実現される。一実施例によると、１つの特別なテンプレートのサブクラス（１３０、１６０または１９０）は、別の特別なテンプレートのサブクラスのインスタンスであるオブジェクトを作成するためにファクトリメソッド（１３１または１６１）を提供する。たとえば、create＿Ｂ＿ＳＴＳ１３１は、Ａ＿ＳＴＳ：ＭＭ＜Ａ＿Ａｂｓ＞１３０内にあり、クラスＢ＿ＳＴＳ：ＭＭ＜Ｂ＿Ａｂｓ＞１６０のインスタンスであるオブジェクトを作成するファクトリメソッドである。理解されるように、ファクトリメソッドは、メソッドを起動するときに、共通のヒープなどのメモリへのポインタがパラメータとして渡される回数を最小化するための機構を提供する。
【００２２】
この出願の全体にわたって、さまざまな動作および動きをコードおよび命令によって行なわれるものまたはコードおよび命令で発生するものとして説明する。しかしながら、これは、命令のコード、またはそこからコンパイルされるコードが、実行されるときに動作および動きを行なわせることを説明するのに都合のよい方法であるに過ぎない。
【００２３】
メモリ管理テンプレート
図２は、この発明の実施例による共通のプリプロセッサメモリ管理コードを提供するメモリ管理テンプレートのブロック図である。メモリ管理テンプレートは、図２に示されるように、共通のプリプロセッサメモリ管理コードを提供し、これは、新規および削除のオペレータを過負荷にすることによって、共通のメモリマネージャに対するインターフェイス（２０４、２０５）およびインプリメンテーション（２３０、２４０）を提供する。クラスおよびテンプレートは、典型的には、（１）メソッドおよび／またはオペレータに対するインターフェイスを規定する規定の部分、および（２）メソッドおよび／またはオペレータに対するコードを規定するインプリメンテーション部分の２つの部分を有する。ＭＭテンプレート（ＭＭ Template）２００はメモリ管理テンプレートの規定を示す。ＭＭテンプレート２００の公開のセクションでは、３つのインターフェイス（２０２、２０４、２０５）が提供される。１つのインターフェイス２０２はＭＭテンプレートのコンストラクタ（ＭＭ Template's Constructor）２１０に対応する。他の２つのインターフェイス（新規（new）２０４および削除（delete）２０５）は、共通のメモリ管理のインプリメンテーション（２３０および２４０）に対応する。保護されたセクションでは、データメンバ、hndlp＿２０６が提供される。データメンバhndlp＿２０６は、共通のプリプロセッサメモリ管理コード（２３０、２４０）によって使用されるヒープまたはサブヒープへのポインタを記憶するために使用される。「Ｔ」（２０１、２１１、２３１、２４１）は、メモリ管理テンプレートの一般的な種類のパラメータであり、後に詳細に説明するように、特別なテンプレートＭＭ＜接続Ａｂｓ＞（ＭＭ＜ConnectionＡｂｓ＞）、ＭＭ＜ステートメントＡｂｓ＞（ＭＭ＜StatementＡｂｓ＞）およびＭＭ＜結果セットＡｂｓ＞（ＭＭ＜ResultsetＡｂｓ＞）を作成するために使用される。
【００２４】
一実施例によると、共通のプリプロセッサメモリ管理コードは、ＭＭテンプレートの新規のオペレータ（ＭＭ Template's new operator）２３０およびＭＭテンプレートの削除のオペレータ（ＭＭ Template's delete operator）２４０で提供される。ＭＭテンプレートの新規のオペレータ２３０は、オペレータの新規のインターフェイス２０４に対するインプリメンテーションコードを提供する。ヒープが存在しない場合、新規のオペレータ２３０は、コードが実現される言語のデフォルトのメモリマネージャを使用して、命令２３２でメモリを割当てる。ヒープが存在する場合、命令２３３で特別な処理が行なわれる。この特別な処理は、ヒープを再区分すること、特別な性能命令を実行すること、存在するヒープにポインタを戻すこと、またはその他の種類の特別な処理を伴い得る。ＭＭテンプレートの削除のオペレータ２４０は、オペレータの削除のインターフェイス２０５に対するインプリメンテーションコードである。ヒープが存在する場合、命令２４２で特別な処理が行なわれる。この特別な処理は、ヒープを解放すること、ヒープの下位区分を解放すること、またはその他の種類の特別な処理を伴い得る。
【００２５】
抽象クラス
図３は、この発明の実施例による特別なテンプレートを提供するために特定の種類としてメモリ管理テンプレートに渡される抽象クラスのブロック図である。接続Ａｂｓクラス（ConnectionＡｂｓ Class）３００、ステートメントＡｂｓクラス（StatementＡｂｓ Class）３１０、および結果セットＡｂｓクラス（ResultsetＡｂｓ Class）３２０は、抽象クラスの例であり、（１）特別なテンプレートのサブクラスで実現されるインターフェイスを提供し、（２）特定の種類としてＭＭテンプレート２００に渡される。一実施例によると、インターフェイス（３０１、３１１）は抽象クラス（３００、３１０、３２０）で提供される。たとえば、これらインターフェイス（３０１、３１１）に対するインプリメンテーションは、特別なテンプレートのサブクラスのメソッド（５１０、５３０）で提供される。一実施例によると、抽象クラス内のインターフェイス（３０１、３１１）および特別なテンプレートのサブクラス内の対応するインプリメンテーション（５１０、５３０）はファクトリメソッドに対するものである。
【００２６】
特別なテンプレートのサブクラス
図４は、この発明の実施例による特別なテンプレートのサブクラスの規定のブロック図である。図５Ａおよび図５Ｂは、この発明の実施例によるこれら特別なテンプレートのサブクラスに対する規定を実現するメソッドのブロック図である。これらの例では、３つの特別なテンプレートのサブクラスの規定（４００、４１０、４２０）が示される。特別なテンプレートのサブクラスは、共通のメモリ管理コードにアクセスするオブジェクトのインスタンスを作成するために使用される（コードの断片４０１、４１１および４２１では、クラス４００、４１０および４２０は特別なテンプレートのサブクラスであることに注意されたい）。たとえば、オブジェクトＡが接続ＳＴＳクラス（ConnectionＳＴＳ Class）４００のインスタンスである場合、オブジェクトＢはステートメントＳＴＳクラス（StatementＳＴＳ Class）４１０のインスタンスであり、オブジェクトＣは結果セットＳＴＳクラス（ResultsetＳＴＳ Class）４２０のインスタンスであり、オブジェクトＡ、ＢおよびＣは、コンパイル時間中にメモリ管理テンプレート（２００、２１０、２３０、２４０）内の同じ共通のプリプロセッサメモリ管理コードからすべて生成されたメモリ管理実行ファイルを有する。
【００２７】
特別なテンプレートのサブクラスの規定の各々は、コンストラクタインターフェイス（４０２、４１２、４２２）を有する。コンストラクタインターフェイスのそれぞれのインプリメンテーションは、接続ＳＴＳのコンストラクタ（ConnectionＳＴＳ's Constructor）５００、ステートメントＳＴＳのコンストラクタ（StatementＳＴＳ's Constructor）５２０、および結果セットＳＴＳのコンストラクタ（ResultsetＳＴＳ's Constructor）５４０である。コンストラクタは、そのコンストラクタが属するクラスのインスタンスで
あるオブジェクトを作成するために使用される。コンストラクタが提供することができる機能の１つは、オブジェクトのデータメンバの初期化である。たとえば、コンストラクタ５００、５２０および５４０は、以下に詳しく説明するように、命令５０１、５２１および５４１でデータメンバhndlp＿２０６を初期化する。別の実施例では、データメンバhndlp＿２０６は、以下に詳しく説明するように、オブジェクトに対するインスタンスを作成するプロセス中にＭＭテンプレートのコンストラクタ（ＭＭ Template's Constructor）２１０が起動されるときにコードの断片２１２で初期化される。コンストラクタ５００および５２０は、命令５０２および５２２でそれぞれデータメンバ４０５および４１５を初期化する。
【００２８】
オブジェクト指向プログラミングによると、オブジェクトがサブクラスのインスタンスである場合、コンストラクタは、オブジェクトのインスタンスを作成するプロセス中にそれらの継承階層の順番で呼出される。たとえば、ＭＭ＜接続Ａｂｓ＞のサブクラスである接続ＳＴＳクラス４００がオブジェクトＡを作成するために使用される場合、接続ＳＴＳのコンストラクタ５００は、ＭＭテンプレートのコンストラクタ２１０の特別なバージョンであるスーパークラスのコンストラクタＭＭ＜接続Ａｂｓ＞：：ＭＭの後に起動される。
【００２９】
一実施例によると、特別なテンプレートのサブクラスは、抽象クラスにある非メモリ管理インターフェイスのインプリメンテーションを提供し、ＭＭテンプレート２００はメモリ管理インターフェイスのインターフェイスおよびインプリメンテーション（２３０、２４０）を提供する。たとえば、特別なテンプレートのサブクラスＡ＿ＳＴＳ：ＭＭ＜Ａ＿Ａｂｓ＞１３０は、非メモリ管理インターフェイス、create＿Ｂ＿ＳＴＳ１１３およびfunction＿Ａ１１４に対するインプリメンテーションを提供し、ＭＭ＜Ｔ＞はメモリ管理インターフェイス、新規１１１および削除１１２のインプリメンテーションを提供する。
【００３０】
別の実施例によると、１つの抽象クラスは一般的なインターフェイスのみを提供するために使用される。たとえば、一般的な抽象クラス、ＭＭ＿Ａｂｓは、任意の種類のオブジェクトを作成するため、または或る種類のプロセスを行なうためのインターフェイスなどの一般的なインターフェイスを提供することができ、メモリ管理テンプレート、ＭＭ＜Ｔ＞内の一般的なパラメータＴは、ＭＭ＿Ａｂｓで置換されて１つの特別なテンプレートＭＭ＜ＭＭ＿Ａｂｓ＞を生成する。この場合、ＭＭ＿Ａｂｓは、コードの断片４０１、４１１および４２１で特別なテンプレートのサブクラスに渡される。
【００３１】
一実施例によると、特別なテンプレートのサブクラスは、特別なテンプレートのサブクラスのインスタンスであるオブジェクトを作成するためにファクトリメソッド（４０３、４１３）を提供する。たとえば、ファクトリメソッドcreateStatement４０３は、後に詳しく説明するように、ステートメントＳＴＳクラス４１０のインスタンスであるオブジェクトを作成するために使用される。特別な他のテンプレートのサブクラスのインスタンスであるオブジェクトを作成する際、ファクトリメソッドのインプリメンテーション（５１０、５３０）は、コードの断片５１１ａおよび５３２ａでそれぞれ新規のオペレータ２３０を起動して、オブジェクトに対してメモリを割当て、続いてコードの断片５１１ｂおよび５３２ｂで他の特別なテンプレートのサブクラスに対してコンストラクタをそれぞれ起動する。たとえば、ファクトリメソッドcreateStatement５１０は、接続ＳＴＳクラス４００内のメソッドであり、オブジェクトＡを作成するために使用され、コードの断片５１１ａは、ＭＭテンプレートの新規のオペレータ２３０を起動してオブジェクトＡに対するメモリを割当て、ステートメントＳＴＳのコンストラクタ５２０は、コードの断片５１１ｂで起動されてオブジェクトＡを「構築する」。ステートメントＳＴＳクラス４１０は、ＭＭ＜ステートメントＡｂｓ＞のサブクラスであるため、ＭＭテンプレートのコンストラクタ２１０の特別な形、ＭＭ＜ステートメントＡｂｓ＞：：Ｍが起動される。一実施例に
よると、ＭＭ＜ステートメントＡｂｓ＞：：Ｍが起動されると、hndlp＿２０６はコードの断片２１２で初期化される。
【００３２】
共通のメモリ管理の動作の例
図６は、この発明の実施例による共通のメモリ管理を使用するオブジェクトを作成するアプリケーションプログラム（application program）のブロック図である。アプリケーションプログラム６００は、接続ＳＴＳオブジェクト、ステートメントＳＴＳオブジェクト、および結果セットＳＴＳオブジェクトの３つのそのようなオブジェクトを一連の命令（６０２、６０３および６０４）で作成する。つまり、接続ＳＴＳオブジェクト、connは命令６０２で作成される。conn内のファクトリメソッドは、命令６０３で起動され、ステートメントＳＴＳオブジェクト、stmtを作成する。stmt内の別のファクトリメソッドが命令６０４で起動され、結果セットＳＴＳオブジェクト、rsを作成する。すべての３つのオブジェクトは、後に詳細に説明するように、共通のプリプロセッサメモリ管理コードから生成されたメモリ管理実行ファイルおよび共通のヒープへのポインタを含む。
【００３３】
メモリ管理実行ファイルは、共通のプリプロセッサコードから得られたものである。たとえば、オブジェクトconnは、ＭＭ＜接続Ａｂｓ＞::operators new and deleteに対するメモリ管理実行ファイルを含み、オブジェクトstmtはＭＭ＜ステートメントＡｂｓ＞::operators new and deleteに対するメモリ管理実行ファイルを含み、オブジェクトrsはＭＭ＜結果セットＡｂｓ＞::operators new and deleteに対するメモリ管理実行ファイルを含む。これらメモリ管理実行ファイルのすべては、図２に示されるＭＭテンプレートによって規定されるように共通のプリプロセッサメモリ管理コードから導かれたものである。
【００３４】
一実施例によると、共通のヒープは、後に詳しく説明するようにオブジェクト間で共有される。一実施例によると、共通のヒープは、オブジェクトを作成する一連の命令（６０２、６０３、６０４）の第１の命令にポインタを渡すことによって共有される。たとえば、ポインタｐＨ１は、命令６０１で共通のヒープに初期化される。一実施例によると、共通のヒープは、後に詳しく説明するように、一連の命令の各命令にポインタを渡すことなくオブジェクト間で共有される。別の実施例によると、共通のヒープは、一連の命令の各命令にポインタを渡すことによってオブジェクト間で共有される。これは、命令６０２、６０３および６０４の起動時にｐＨ１が存在する場合にあてはまる。
【００３５】
命令６０１では、アプリケーションプログラム６００は、ポインタを共通のヒープに初期化する。命令６０２では、アプリケーションプログラム６００は、グローバルなプログラム、createConnection６１０を起動し、これは、（１）接続ＳＴＳオブジェクト、connを作成し、（２）ポインタをconnオブジェクトに戻し、（３）この共通のヒープへのポインタを新たに作成されたconnオブジェクトにセーブする。
【００３６】
たとえば、グローバルなプログラム、createConnection６１０は、命令６１１でconnオブジェクトを作成する。命令６１１は、コードの断片６１１ａでのＭＭ＜接続ＳＴＳ＞::newの起動、およびコードの断片６１１ｂでの接続ＳＴＳのコンストラクタ５００の起動の２つの部分を有する。ＭＭ＜接続ＳＴＳ＞::newはＭＭテンプレートの新規のオペレータ２３０の特別なバージョンであり、これは命令２３２でconnオブジェクトにメモリを割当て、ポインタをconnに戻す。接続ＳＴＳのコンストラクタ５００は、ＭＭ＜接続Ａｂｓ＞::hndlp＿を命令５０１で初期化し、かつ任意で命令５０２で他のデータメンバを初期化することによって、connを「構築する」。接続ＳＴＳクラス４００は、ＭＭ＜接続Ａｂｓ＞４０１のサブクラスであるため、ＭＭテンプレートのコンストラクタ２１０の特別なバージョンが起動される。
【００３７】
命令６０３および６０４では、オブジェクト内のファクトリメソッドは、とりわけ、（
１）他のオブジェクトを作成し、（２）これら他のオブジェクトの各々に共通のヒープへのポインタを通信するために使用される。オブジェクト、stmtおよびrsを作成するため、ファクトリメソッド、createStatementメソッド（createStatement method）５１０およびexecQueryメソッド（execQuery method）５４０が命令６０３および６０４でそれぞれ起動される。共通のヒープにポインタを通信するために、ファクトリメソッド、createStatementおよびexecQueryは、１つのオブジェクトから次に作成されたオブジェクトへとポインタを伝搬する。たとえば、オブジェクトconnは命令６０２で作成され、命令６０３で共通のヒープのポインタをオブジェクトstmtに通信するために使用される。これは、共通のヒープメンバへのポインタ、ｐＨ１を命令６０２でcreateConnection６１０に渡すことによって実現される。コードの断片６１１ａは、ＭＭ＜接続Ａｂｓ＞::newを呼出すことに繋がる。コードの断片６１１ｂは、接続ＳＴＳのコンストラクタ５００の呼出に繋がり、共通のヒープへのポインタもオブジェクトconnにセーブされる。接続ＳＴＳのコンストラクタ５００は、共通のヒープのポインタを命令５０１でＭＭ＜接続Ａｂｓ＞::hndlp＿にセーブする。次いでセーブされた共通のヒープへのポインタは、命令６０３でオブジェクトconnからオブジェクトstmtに伝搬され、このときconn内のファクトリメソッドcreateStatementは、オブジェクトstmtを作成するために使用される。たとえば、コードの断片５１１ａでは、hndlp＿２０６の特別なバージョンである、ＭＭ＜接続Ａｂｓ＞::hndlp＿は、新しいオペレータに渡され、これはstmtオブジェクトに対してメモリを割当てる。同様の処理が命令６０４でオブジェクトrsに関して行なわれる。
【００３８】
オブジェクトの階層的なツリー
図７は、この発明の実施例による互いに階層的なツリー関係（以降は「階層的なツリー」と称される）を有するオブジェクトのセットのブロック図である。たとえば、所与のデータベース接続では、１つまたは複数の照会はステートメントを伴って実行される。結果セットが照会に応答して戻される。ストリームは、１つのファンクションコールで読出すことができないバイナリラージオブジェクト（Binary Large Objects）などの大きなデータオブジェクトの読出を調整するために結果セットから獲得される。したがって、階層的な関係は、データベース接続、および関連するステートメント、結果セットおよびストリームの間に存在する。接続および関連するステートメント、結果セットおよびストリームは各々オブジェクトによって表現することができ、オブジェクトはオブジェクト間の関係を反映した階層的なツリーに組織化することができる。
【００３９】
たとえば、Conn＿１は接続オブジェクトである。Stmt＿１、Stmt＿２およびStmt＿３は、この接続に対する照会で使用されるステートメントを表現するステートメントオブジェクトである。RS＿１およびRS＿２は、Stmt＿１を使用して照会に応答して戻される結果セットを表わす結果セットオブジェクトである。RS＿３およびRS＿４は、Stmt＿３を使用して照会に応答して戻される結果セットを表わす結果セットオブジェクトである。ストリーム、Stream＿１およびStream＿２は、結果セットRS＿１およびRS＿４からそれぞれ獲得される。とりわけメソッドを実行するためおよび計算を実行するために使用されるメモリ（Ｈ０、Ｈ１、Ｈ２、Ｈ３、Ｈ１１、Ｈ１２、Ｈ３１、Ｈ３２、Ｈ１１１、Ｈ３２１）は、階層的なツリーで各オブジェクトと関連付けられる。たとえば、メモリＨ０はオブジェクトConn＿１と関連付けられ、メモリＨ１はオブジェクトStmt＿１と関連付けられる、等である。
【００４０】
オブジェクトの階層的なツリーと関連付けられるメモリ
図８は、この発明の実施例によるオブジェクトのセットの各オブジェクトと関連付けられるいくつかのメモリのブロック図である。いくつかのメモリ（以降は、階層的なメモリのツリーと称される）は、オブジェクトのセットの階層的なツリーの関係を反映するように組織化される。一実施例によると、図８は、図７に示されるオブジェクトのセットと関連付けられる階層的なメモリのツリーを示す。たとえば、Ｈ０は、オブジェクトConn＿１
と関連付けられる１つのメモリであり、Ｈ１、Ｈ２およびＨ３は、ステートメントオブジェクトStmt＿１、Stmt＿２およびStmt＿３とそれぞれ関連付けられるメモリであり、Ｈ１１、Ｈ１２、Ｈ３１およびＨ３２は、オブジェクト結果セットオブジェクトRS＿１、RS＿２、RS＿３およびRS＿４とそれぞれ関連付けられるメモリであり、Ｈ１１１およびＨ３２１は、ストリームオブジェクトStream＿１およびStream＿２と関連付けられるメモリである。
【００４１】
一実施例によると、ヒープは階層的なツリーの頂点のオブジェクトと関連付けられる１つのメモリであり、このヒープのサブヒープは、残りのオブジェクトと関連付けられるいくつかのメモリである。たとえば、図７では、頂点のオブジェクトConn＿１と関連付けられるＨ０はヒープとなり、残りのオブジェクト（Ｈ１、Ｈ２、Ｈ３等）と関連付けられるメモリはＨ０のサブヒープである。
【００４２】
階層的なメモリのツリーの階層を決定する階層的なデータが維持され、階層的なメモリのツリーが階層的なツリー内のオブジェクトのセット間の関係を反映するように維持される。このデータは、とりわけ、（１）オブジェクトのセットのデータメンバ内、（２）オブジェクトのセットと関連付けられるメモリ内、または（３）１つまたは複数のテーブル内で維持されるポインタおよび参照であり得る。
【００４３】
オブジェクトのセットの階層的な関係を反映する階層的なデータをメモリに対して維持することによって、メモリの下位ツリーは、オブジェクトのデストラクタまたは関数（function）などの単一の要求で解放することができ、階層的なツリー内の他のオブジェクト、または階層的なツリー内の他のオブジェクトと関連付けられるメモリに影響しない。
【００４４】
一実施例では、この階層的なデータは、階層的なメモリのツリー内でヒープおよび各サブヒープと関連付けられる兄弟（sibling）および子（children）のポインタの対である。ヒープおよび各サブヒープは、それ自身の子およびそれ自身の兄弟のリストを指す。たとえば、Conn＿１と関連付けられるヒープＨ０の子は、サブヒープＨ１、Ｈ２およびＨ３である。サブヒープＨ１の兄弟はサブヒープＨ２およびＨ３である。
【００４５】
単一の要求を使用するメモリの下位ツリーと関連付けられるメモリの解放
図９、図１０Ａおよび図１０Ｂは、この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラス、およびこれらオブジェクトと関連付けられるメモリをのブロック図である。図９は、接続、ステートメントおよび結果セットのクラスに対してクラスの規定を示すブロック図である。図１０Ａおよび図１０Ｂは、これらクラスと関連付けられるメソッドのブロック図である。この例では、クラスは接続、ステートメントおよび結果セットのオブジェクトを作成するために使用される。図１１は、この発明の実施例による、図９、図１０Ａおよび図１０Ｂに示されるクラスとともにオブジェクトを作成するプログラムを示すブロック図である。
【００４６】
一実施例によると、単一の要求でメモリの下位ツリーと関連付けられるメモリの解放は、共通のメモリ管理とともに行なわれる。この場合、接続クラス（Connection class）９００、ステートメントクラス（Statement class）９１０および結果セットクラス（Resultset Class）９２０は、特別なテンプレートのサブクラスである。たとえば、接続クラス９００がオブジェクトＡを作成するために使用されるとき、新規のオペレータ２３０が起動される。同様に、オブジェクトＡが破壊されるとき、接続クラス９００内のデストラクタ（図示せず）が起動され、これは削除のオペレータ２４０を起動する。削除のオペレータ２４０、または削除のオペレータ２４０が起動する関数が、階層的なデータを横断して、オブジェクトＡと関連付けられるメモリ、およびオブジェクトＡと関連付けられる下位ツリーを解放する。たとえば、図７に示されるように、Stmt＿１に対するデストラクタが
アプリケーションプログラムから起動される場合、図８に示されるように、デストラクタは子および兄弟のポインタを使用して、サブヒープＨ１、Ｈ１１、Ｈ１２、Ｈ１１１が解放されるべきであると決定することができる。
【００４７】
別の実施例によると、単一の要求でメモリの下位ツリーと関連付けられるメモリの解放は、共通のメモリ管理コードなしに行なわれる。たとえば、接続クラス９００、ステートメントクラス９１０、および結果セットクラス９２０は特別なテンプレートのサブクラスではない。
【００４８】
メモリへのポインタ（９０６、９１６、９２３）は、階層的なツリーでオブジェクトを作成するために使用される各クラス（９００、９１０、９２０）と関連付けられる。たとえば、接続クラス９００、ステートメントクラス９１０、および結果セットクラス９２０は、すべてヒープまたはサブヒープへのポインタ（９０６、９１６、９２３）を有する。コンストラクタ（１０００、１０２０、１０４０）は、初期化の命令（１００１、１０２１、１０４１）を使用してこれらポインタ（９０６、９１６、９２３）を初期化するために使用される。たとえば、接続のコンストラクタ（connection's constructor）１０００、ステートメントのコンストラクタ（statement's constructor）１０２０および結果セットのコンストラクタ（resultset's constructor）１０４０は、初期化の命令１００１、１０２１および１０４１で、ヒープまたはサブヒープに向くようにそれぞれのメモリのポインタを初期化する。ファクトリメソッド（１０１０、１０３０）は、他のクラスの種類の新しいオブジェクトを作成するためだけでなく、新しく作成されたオブジェクト（１０１１、１０３２）にメモリを割当てかつオブジェクトのセット間の階層的な関係を反映する階層的なデータ（９０７、９０８、９１７、９１８、９２４、９２５）をメモリに対して維持するためにも使用される。たとえば、接続のcreateStatementメソッド（connection's createStatement method）１０１０は、（１）接続オブジェクトのヒープ（９０６）の新しいサブヒープを命令１０１１で作成し、（２）ステートメントオブジェクトを作成し、新しく作成されたサブヒープを命令１０１２でステートメントオブジェクトと関連付け、（３）サブヒープに対して子および兄弟のポインタ（９０７および９０８）の形で階層的なデータを維持して、命令１０１３でサブヒープがオブジェクトのセット間の階層的な関係を反映するようにする。
【００４９】
ファクトリメソッドでオブジェクトを作成し、階層的なデータをこれらオブジェクトと関連付けられるメモリに、またはオブジェクト自身のデータメンバとして維持することによって、下位ツリーおよびそれに関連付けられるメモリを単一の要求で解放することができる。階層的なデータをメモリに維持する例は既に説明した。階層的なデータがオブジェクトでデータメンバとして維持されると仮定すると、関数は、オブジェクトStmt＿１、RS＿１、RS＿２およびStream＿１でデータメンバを使用して、サブヒープＨ１、Ｈ１１、Ｈ１２、Ｈ１１１が解放されるべきだと決定することができる。
【００５０】
別の実施例
別の実施例によると、階層的なメモリのツリーのためのすべてのメモリは連続した１つのメモリにあり、これは階層的なツリー内で各オブジェクトと関連付けられるメモリの別々の部分にさらに分けられる。ポインタは、個々のオブジェクトと関連付けられるメモリの部分の間の関係を維持するために使用される。これらポインタを維持するための方法であればどのような方法でも使用可能であり、たとえば、単一のメモリ自身にポインタを維持すること、またはテーブルにポインタを維持することが可能である。
【００５１】
ハードウェアの概要
図１２は、この発明の実施例を実現可能なコンピュータシステム１２００を示すブロック図である。コンピュータシステム１２００は、情報を通信するためのバス１２０２また
は他の通信機構、および情報を処理するためのバス１２０２に結合されたプロセッサ１２０４を含む。コンピュータシステム１２００は、プロセッサ１２０４によって実行されるべき情報および命令を記憶するために、バス１２０２に結合されるランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置などのメインメモリ１２０６も含む。メインメモリ１２０６は、プロセッサ１２０４によって実行されるべき命令の実行中に一時的な変数または他の中間情報を記憶するために使用してもよい。コンピュータシステム１２００は、プロセッサ１２０４のための静的な情報および命令を記憶するために、バス１２０２に結合されるリードオンリメモリ（ＲＯＭ）１２０８または他の静的記憶装置をさらに含む。磁気ディスクまたは光ディスクなどの記憶装置１２１０が、情報および命令を記憶するために設けられ、バス１２０２に結合される。
【００５２】
コンピュータシステム１２００は、情報をコンピュータのユーザに表示するために、バス１２０２を介してブラウン管（ＣＲＴ）などのディスプレイ１２１２に結合されてもよい。英数字キーおよび他のキーを含む入力装置１２１４は、情報およびコマンドの選択をプロセッサ１２０４に通信するためにバス１２０２に結合される。他の種類のユーザ入力装置は、マウス、トラッグボールまたはカーソル方向キーなどのカーソル制御１２１６であり、方向情報およびコマンドの選択をプロセッサ１２０４に通信し、カーソルの動きをディスプレイ１２１２上で制御する。この入力装置は、典型的には第１の軸（たとえば、ｘ）および第２の軸（たとえば、ｙ）の２つの軸での２自由度を有し、装置は平面での位置を特定することができる。
【００５３】
この発明は、ここに説明される技術を実現するためにコンピュータシステム１２００を使用することに関する。この発明の一実施例によると、これらの技術は、プロセッサ１２０４がメインメモリ１２０６に含まれる１つまたは複数の命令の１つまたは複数のシーケンスを実行することに応答して、コンピュータシステム１２０４によって行なわれる。そのような命令は、記憶装置１２１０などの別のコンピュータ読取可能な媒体からメインメモリ１２０６に読込まれてもよい。メインメモリ１２０６に含まれる命令のシーケンスの実行は、ここに説明されるプロセスのステップをプロセッサ１２０４に行なわせる。別の実施例では、この発明を実行するために、ソフトウェアの命令の代わりに、またはそれと組合せてハードウェアに組込みの回路を使用してもよい。したがって、この発明の実施例はハードウェアに組込みの回路およびソフトウェアの特定の組合せに限定されない。
【００５４】
ここで使用される「コンピュータ読取可能な媒体」という言葉は、プロセッサ１２０４に命令を提供して実行することに参加するあらゆる媒体を指す。そのような媒体は、これらに限らないが、不揮発性媒体、揮発性媒体および伝送媒体などを含む多くの形をとり得る。不揮発性媒体は、たとえば、記憶装置１２１０などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ１２０６などの動的メモリを含む。伝送媒体は、バス１２０２を含むワイヤを含む同軸ケーブル、導線および光ファイバを含む。伝送媒体は、無線データ通信および赤外線データ通信中に生成されるような音波または光波の形もとり得る。
【００５５】
コンピュータ読取可能な媒体の一般的な形は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、またはその他の磁気媒体、ＣＤ−ＲＯＭ、その他の光媒体、パンチカード、紙テープ、孔のパターンを備えたその他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、その他のメモリチップまたはカートリッジ、後に説明する搬送波、またはそこからコンピュータが読取ることのできる他の媒体を含む。
【００５６】
さまざまな形のコンピュータ読取可能な媒体が１つまたは複数の命令の１つまたは複数のシーケンスをプロセッサ１２０４に運んで実行することに関わり得る。たとえば、命令
は当初遠隔コンピュータの磁気ディスク上で運ばれてもよい。遠隔コンピュータは命令をその動的メモリにロードし、モデムを使用して電話線上で命令を送信することができる。コンピュータシステム１２００のローカルモデムはデータを電話線上で受け取り、赤外線送信機を使用してデータを赤外線信号に変換する。赤外線検出器は赤外線信号で運ばれたデータを受け取り、適切な回路はそのデータをバス１２０２上に位置付けることができる。バス１２０２はデータをメインメモリ１２０６に運び、そこからプロセッサ１２０４は命令を検索し実行することができる。メインメモリ１２０６によって受取られた命令は、任意でプロセッサ１２０４による実行の前後に記憶装置１２１０に記憶されてもよい。
【００５７】
コンピュータシステム１２００は、バス１２０２に結合される通信インターフェイス１２１８も含む。通信インターフェイス１２１８は、ローカルネットワーク１２２２に接続されるネットワークリンク１２２０に結合する２方向のデータ通信を提供する。たとえば、通信インターフェイス１２１８は、データ通信接続を対応する種類の電話線に提供するための統合デジタル通信網（ＩＳＤＮ）カードまたはモデムであってもよい。別の例としては、通信インターフェイス１２１８は、データ通信接続を互換性ＬＡＮに提供するためのローカルエリアネットワーク（ＬＡＮ）カードであってもよい。無線リンクを実現しても良い。そのような実現例では、さまざまな種類の情報を表わすデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を授受する。
【００５８】
ネットワークリンク１２２０は、典型的には、１つまたは複数のネットワークを介して他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク１２２０はローカルネットワーク１２２２を介して、ホストコンピュータ１２２４またはインターネットサービスプロバイダ（ＩＳＰ）１２２６によって運営されるデータ機器に接続を提供し得る。ＩＳＰ１２２６は、現在には一般に「インターネット」１２２８と称される世界規模のパケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク１２２２およびインターネット１２２８は、ともにデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を使用する。さまざまなネットワークを介した信号およびネットワークリンク上ならびに通信インターフェイス１２１８を介した信号は、コンピュータシステム１２００で授受されるデジタルデータを運び、情報を運ぶ搬送波の例示的な形である。
【００５９】
コンピュータシステム１２００は、ネットワーク、ネットワークリンク１２２０および通信インターフェイス１２１８を通じて、プログラムコードを含むメッセージを送信しデータを受取る。インターネットの例では、サーバ１２３０は、インターネット１２２８、ＩＳＰ１２２６、ローカルネットワーク１２２２および通信インターフェイス１２１８を介してアプリケーションプログラムに対して要求されたコードを送信することができる。
【００６０】
受け取られたコードは、受け取られたときにプロセッサ１２０４によって実行されてもよいし、および／または後に実行するために記憶装置１２１０、または他の不揮発性記憶装置に記憶してもよい。このようにして、コンピュータシステム１２００は搬送波の形でアプリケーションコードを獲得することができる。
【００６１】
明細書では、この発明をその具体的な実施例に関して説明してきた。しかしながら、この発明の精神および範囲を離れることなく、さまざまな変形および変更を行ない得ることが明らかであろう。したがって、明細書および図面は、限定的なものではなく、例示的なものとしてみなされるべきである。
【図面の簡単な説明】
【００６２】
【図１】この発明の実施例による異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するためにメモリ管理テンプレートを使用する３つのクラスの階層のブロック図である。
【図２】この発明の実施例によるプリプロセッサメモリ管理コードを提供するメモリ管理テンプレートのブロック図である。
【図３】この発明の実施例による特別なテンプレートを提供するために特定の種類としてメモリ管理テンプレートに渡される抽象クラスのブロック図である。
【図４】この発明の実施例による特別なテンプレートのサブクラスの規定のブロック図である。
【図５Ａ】この発明の実施例によるこれら特別なテンプレートのサブクラスに対する規定を実現するメソッドのブロック図である。
【図５Ｂ】この発明の実施例によるこれら特別なテンプレートのサブクラスに対する規定を実現するメソッドのブロック図である。
【図６】この発明の実施例による共通のメモリ管理を使用するオブジェクトを作成するアプリケーションプログラムのブロック図である。
【図７】この発明の実施例による互いに階層的なツリーの関係を有するオブジェクトのセットのブロック図である。
【図８】この発明の実施例によるオブジェクトのセットの各オブジェクトと関連付けられるいくつかのメモリのブロック図である。
【図９】この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラスおよびこれらオブジェクトと関連付けられるメモリのブロック図である。
【図１０Ａ】この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラスおよびこれらオブジェクトと関連付けられるメモリのブロック図である。
【図１０Ｂ】この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラスおよびこれらオブジェクトと関連付けられるメモリのブロック図である。
【図１１】この発明の実施例による、図９、図１０Ａおよび図１０Ｂに示されるクラスとともにオブジェクトを作成するプログラムのブロック図である。
【図１２】この発明の実施例を実現することのできるコンピュータシステムの図である。
【図１】
2005531050.tif 000003
【図２】
2005531050.tif 000004
【図３】
2005531050.tif 000005
【図４】
2005531050.tif 000006
2005531050.tif 000007
2005531050.tif 000008
【図６】
2005531050.tif 000009
【図７】
2005531050.tif 000010
【図８】
2005531050.tif 000011
【図９】
2005531050.tif 000012
2005531050.tif 000013
2005531050.tif 000014
【図１１】
2005531050.tif 000015
【図１２】
2005531050.tif 000016
【手続補正書】
【提出日】平成16年7月29日(2004.7.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
階層的なツリーの関係を有するオブジェクトのセットと関連付けられるメモリを解放する方法であって、前記方法はコンピュータで実現されるステップを含み、前記コンピュータで実現されるステップは、
前記階層的なツリーの関係を有する前記オブジェクトのセットを作成するステップと、
各オブジェクトに対してメモリを割当てるステップと、
各オブジェクトに対する前記メモリ間の関係を規定するデータを維持するステップとを含み、
前記データは前記階層的なツリーの関係の組織を反映し、前記コンピュータで実現されるステップはさらに、
オブジェクトと関連付けられるメモリを解放するための要求を受取るステップと、
前記要求を受取ることに応答して、どのメモリが前記オブジェクトの子孫である１つまたは複数のオブジェクトと関連付けられるかを決定するために前記データにアクセスするステップと、
前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップとを含み
前記データは子および兄弟のポインタの対を含み、前記関係を規定する前記データを維持するステップは、
各メモリに対する前記メモリ間の前記関係を規定する前記子および兄弟のポインタの対を維持するステップをさらに含む、方法。
【請求項２】
前記階層的なツリーの関係の頂点にあるオブジェクトと関連付けられるメモリはヒープであり、前記階層的なツリーの関係で残りのオブジェクトと関連付けられるメモリは前記ヒープのサブヒープであり、前記割当てるステップは、
前記階層的なツリーの関係で前記頂点にあるオブジェクトに対して前記ヒープを割当て、かつ前記残りのオブジェクトに対して前記ヒープの前記サブヒープを割当てるステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記データにアクセスするステップは、
前記オブジェクトの子孫である前記１つまたは複数のオブジェクトを決定するために前
記子および兄弟のポインタの対にアクセスするステップをさらに含む、請求項１に記載の方法。
【請求項４】
前記割当てるステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記メモリ管理実行ファイルは新規のオペレータであり、前記割当てるステップは、
前記新規のオペレータを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項４に記載の方法。
【請求項６】
前記解放するステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記メモリ管理実行ファイルは削除のオペレータであり、前記解放するステップは、
前記削除のオペレータを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項６に記載の方法。
【請求項８】
前記解放するステップは、
単一の要求を起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリの解放を行なわせるステップをさらに含む、請求項６に記載の方法。
【請求項９】
前記単一の要求は前記オブジェクトに対するデストラクタであり、前記解放するステップは、
前記デストラクタを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
特定のオブジェクトに対するメモリはファクトリメソッドで作成され、前記割当てるステップは、
前記特定のオブジェクトに対して前記ファクトリメソッドで前記メモリを割当てるステップをさらに含む、請求項１に記載の方法。
【請求項１１】
前記関係を規定する前記データの少なくとも一部分はファクトリメソッドで維持され、前記データを維持するステップは、
前記特定のオブジェクトに対するメモリと前記残りのオブジェクトに対するメモリとの間の関係を規定する前記データの少なくとも前記一部分の維持は前記ファクトリメソッドで行なわれるステップをさらに含む、請求項１に記載の方法。
【請求項１２】
前記データは前記オブジェクトのセットのデータメンバで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために前記データメンバを維持するステップをさらに含む、請求項１に記載の方法。
【請求項１３】
前記データは各オブジェクトに対する前記メモリで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために各オブジェクトに対する前記メモリで前記データを維持するステップをさらに含む、請求項１に記載の方法。
【請求項１４】
階層的なツリーの関係を有するオブジェクトのセットと関連付けられるメモリを解放するための命令の１つまたは複数のシーケンスを運ぶコンピュータ読取可能な媒体であって、１つまたは複数のプロセッサによる前記命令の１つまたは複数のシーケンスの実行は、前記１つまたは複数のプロセッサに以下のステップを行なわせ、前記以下のステップは、
前記階層的なツリーの関係を有する前記オブジェクトのセットを作成するステップと、
各オブジェクトに対してメモリを割当てるステップと、
各オブジェクトに対する前記メモリ間の関係を規定するデータを維持するステップとを含み、前記データは前記階層的なツリーの関係の組織を反映し、前記以下のステップはさらに、
オブジェクトと関連付けられるメモリを解放するための要求を受取るステップと、
前記要求を受取ることに応答して、
どのメモリが前記オブジェクトの子孫である１つまたは複数のオブジェクトと関連付けられるかを決定するために前記データにアクセスするステップと、
前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップとを含み、
前記データは子および兄弟のポインタの対を含み、前記関係を規定する前記データを維持するステップは、
各メモリに対する前記メモリ間の前記関係を規定する前記子および兄弟のポインタの対を維持するステップをさらに含む、コンピュータ読取可能な媒体。
【請求項１５】
前記階層的なツリーの関係の頂上にあるオブジェクトと関連付けられるメモリはヒープであり、前記階層的なツリーの関係で残りのオブジェクトと関連付けられるメモリは前記ヒープのサブヒープであり、前記割当てるステップは、
前記階層的なツリーの関係で前記頂上にある前記オブジェクトに対して前記ヒープを割当て、かつ前記残りのオブジェクトに対して前記ヒープの前記サブヒープを割当てるステップをさらに含む、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項１６】
前記データにアクセスするステップは、
前記オブジェクトの子孫である前記１つまたは複数のオブジェクトを決定するために前記子および兄弟のポインタの対にアクセスするステップをさらに含む、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項１７】
前記割当てるステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項１８】
前記メモリ管理実行ファイルは新規のオペレータであり、前記割当てるステップは、
前記新規のオペレータを起動することによって、各オブジェクトに対して前記メモリを割当てるステップをさらに含む、請求項１７に記載のコンピュータ読取可能な媒体。
【請求項１９】
前記解放するステップは、
プリプロセッサコードから生成されたメモリ管理実行ファイルを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項２０】
前記メモリ管理実行ファイルは削除のオペレータであり、前記解放するステップは、
前記削除のオペレータを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項１９に記載のコンピュータ読取可能な媒体。
【請求項２１】
前記解放するステップは、
単一の要求を起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリの解放を行なわせるステップをさらに含む、請求項１９に記載のコンピュータ読取可能な媒体。
【請求項２２】
前記単一の要求は前記オブジェクトに対するデストラクタであり、前記解放するステップは、
前記デストラクタを起動することによって、前記オブジェクトと関連付けられるメモリおよび前記オブジェクトの前記子孫と関連付けられるメモリを解放するステップをさらに含む、請求項２１に記載のコンピュータ読取可能な媒体。
【請求項２３】
特定のオブジェクトに対するメモリはファクトリメソッドで作成され、前記割当てるステップは、
前記特定のオブジェクトに対して前記ファクトリメソッドで前記メモリを割当てるステップをさらに含む、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項２４】
前記関係を規定する前記データの少なくとも一部分はファクトリメソッドで維持され、前記データを維持するステップは、
前記特定のオブジェクトに対するメモリと前記残りのオブジェクトに対するメモリとの間の関係を規定する前記データの少なくとも前記一部分の維持は前記ファクトリメソッドで行なわれるステップをさらに含む、請求項１４に記載のコンピュータ読取可能な媒体。
【請求項２５】
前記データは前記オブジェクトのセットのデータメンバで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために前記データメンバを維持するステップをさらに含む、請求項１５に記載のコンピュータ読取可能な媒体。
【請求項２６】
前記データは各オブジェクトに対する前記メモリで維持され、前記関係を規定する前記データを維持するステップは、
各オブジェクトに対する前記メモリ間の前記関係を規定するために各オブジェクトに対する前記メモリで前記データを維持するステップをさらに含む、請求項１４に記載のコンピュータ読取可能な媒体。
【国際調査報告】
2005531050.tif 000017
2005531050.tif 000018
2005531050.tif 000019