(57)【要約】【課題】オブジェクト指向言語を用いた抽象度の高いそして大規模なプログラミングモデルにおいて、オブジェクト指向で目指す隠蔽性が損われず、記憶装置も少なくて済み、処理速度が良好なオブジェクト指向メモリ管理方法を提供する。【解決手段】各オブジェクトが計算時にアクセスを必要とするメモリ領域が連続して確保されたアレイオブジェクトが作成され、各オブジェクトには、当該オブジェクトが計算時に前記メモリ領域へアクセスするための参照情報が前記アレイオブジェクトをスライシングして割り当てられ、さらに各オブジェクトは前記参照情報を基に前記アレイオブジェクトの当該参照情報に該当する部分を更新することを特徴とするオブジェクト指向メモリ管理方法。【選択図】図３
2007188384.tif 000002
【特許請求の範囲】
【請求項１】
各オブジェクトが計算時にアクセスを必要とするメモリ領域が連続して確保されたアレイオブジェクトが作成され、
各オブジェクトには、当該オブジェクトが計算時に前記メモリ領域へアクセスするための参照情報が前記アレイオブジェクトをスライシングして割り当てられ、
さらに各オブジェクトは前記参照情報を基に前記アレイオブジェクトの当該参照情報に該当するメモリ領域を更新することを特徴とするオブジェクト指向メモリ管理方法。
【請求項２】
前記アレイオブジェクトが確保するメモリ領域の参照情報は、ｍ個のｎ次元行列にて表現されており、
前記スライシングは、前記ｎ次元行列にて表現された参照情報を単位として行われるものであることを特徴とする請求項１に記載のオブジェクト指向メモリ管理方法。
【請求項３】
前記アレイオブジェクトはクラス定義部を有し、該クラス定義部の作用の下で、前記各オブジェクトの前記メモリ領域へのアクセスによるデータの入出力が行われるものであることを特徴とする請求項１または請求項２に記載のオブジェクト指向メモリ管理方法。
【請求項４】
請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法を採用していることを特徴とする解析プログラム。
【請求項５】
前記解析プログラムは、解析対象をメッシュ分割し、各メッシュに同じ内容の計算を行い、計算に必要なデータと計算結果についてのメモリの管理はｍ個のｎ次元にて表現された参照情報で特定されるメモリ領域を使用して行われ、さらに前記メモリの管理は請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法にてなされるものであることを特徴とする請求項４に記載の解析プログラム。
【請求項６】
原子炉炉心特性解析プログラムであることを特徴とする請求項４または請求項５に記載の解析プログラム。
【請求項７】
原子炉の炉心を水平方向（２次元）と上下方向（１次元）からなる３次元にメッシュ分割し、各メッシュに初期値としての各種物理量を記憶し、また記憶した初期値を基にそれらの経時変化を計算し、さらに該計算の際に請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法を採用している原子炉炉心特性解析プログラムであって、
前記初期値としての各種物理量と計算された経時毎の物理量についての各メッシュのメモリの管理が、ｍ個のｎ次元行列で表現された参照情報で定まる記憶領域においてなされるものであることを特徴とする原子炉炉心特性解析プログラム。
【請求項８】
各メッシュについて前記ｎ次元行列で表現された参照情報で定まる記憶領域に記憶されているデータを使用して計算を行い、また計算結果を格納するステップを有していることを特徴とする請求項７に記載の原子炉炉心特性解析プログラム。
【請求項９】
各メッシュについて繰返し計算を行うステップを有していることを特徴とする請求項８に記載の原子炉炉心特性解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はオブジェクト指向メモリ管理方法に関し、特に原子炉炉心解析用にメモリアクセスの抽象化と効率化を図ったオブジェクト指向メモリ管理方法に関する。
【背景技術】
【０００２】
原子炉の炉心解析等の大規模な科学技術計算では、大量の一次記憶装置が必要であり、さらにメモリの使用効率が、計算体系の規模や計算速度に大きな影響を与え、ひいては計算精度にも影響を与える。一方、近年のプログラミング方法論における開発効率向上の観点から、オブジェクト指向アプローチを利用することが多いが、この手法はデータの集合とそのデータを操作する手段等のデータに対応する手段とを１つのまとまりとして管理するため、メモリ管理等のハードウェアに近い部分は直接的には取り扱わないのが一般的である。
【０００３】
大規模な科学技術計算、例えば原子炉炉心解析、気象予報、各種のシュミレーション解析等では、参照用データ、初期値、境界値等の当初のデータのみならず途中結果をも保持しておかねばならないことが多い。特に何度も類似した処理を繰返す計算、具体的には例えば最初は境界条件を基に大まかなメッシュ分割で応力や熱の分布等を計算し、次にその計算結果を使用して少し細かなメッシュ分割で応力や熱の分布等を少し詳しく計算し、以降徐々にメッシュ分割を小さくして精密な応力や熱の分布等を計算するプログラム、初期値を基にメッシュ分割された各部の１ケ月後の状態を計算し、次にその計算結果を使用して２ケ月後の状態を計算し、以下この手順を繰返して１年後の状態を計算する気象予測のプログラムや原子炉の燃焼の解析プログラム等が、そうである。
【０００４】
そこで、例えばＣ＋＋等のオブジェクト指向言語を使用して、あるいは利用してかかる計算、解析を行う場合には、オブジェクト指向言語に備わる動的なメモリ確保機能により一般にヒープ領域と呼ばれる特定のメモリ領域にそのデータ領域を確保し、当該オブジェクトに割り当てる。しかし、一般的な動的メモリの確保の手法（ｎｅｗ、オブジェクト生成のメソッド）を用いる限り、プログラム実行中に確保する際のメモリ領域の位置が変化する場合があるため、必要なデータが連続するメモリ領域から取出される保証はなく、またメモリの断片化が発生する可能性がある。これらの様子を、図１に概念的に示す。図１において、１０はベースメモリのアドレス（ａｄｄｒで示す）であり、１１、１２、１３はヒープ領域における各オブジェクトのアドレスであり、２１、２２、２３は各オブジェクト（操作対象となるデータと、実際の操作を行う実施部（関数）がセットになっているもの。Ｆｏｒｔｒａｎにおける、現実に炉心の中性子分布等の解析を行うサブルーチンに相当するもの）１、同２、同３である。また、矢印は、ベースメモリのアドレスの方向（順にアドレス番号が大きくなる）である。各オブジェクト１、同２、同３は、各々小さなヒープ領域のアドレス１１、１２、１３を割当てられている。図１に示す様に、各ヒープ領域のアドレス１１、１２、１３は不連続な領域となっており、ひいてはアドレスも不連続となる。
【０００５】
また、繰返し計算等で途中結果を保持する等のためにメモリ領域の確保と開放を繰返すと、メモリの断片化が促進され、その結果ファイルアクセスも少量のデータ単位で大量のＩ／Ｏトランザクションを実行せざるを得ず、処理時間の面からも不利になる。
その対策として、各オブジェクトがデータを重複して持つことは、ハード面はもちろんソフト面からも困難であることが多い。
【０００６】
そこで、一度１つの連続する大きなメモリ空間を持つ配列を確保しておき、その一部を各オブジェクトに割当てる様にメモリ確保部分に工夫を凝らすことが考えられる。即ち、各オブジェクト内にデータの本体を持たせるのではなく、あくまでもデータを記憶している連続メモリ領域への参照情報を割当てることが考えられる。図２に、この様子を示す。本図において、各オブジェクト１、同２、同３用に、ベースメモリのアドレス内で連続するアドレス１１、１２、１３が、即ちベースメモリ内で連続した領域（連続したヒープ領域）となるアドレスが割当てられ、さらに各オブジェクト１、同２、同３には各々その割当てられたアドレス１１、１２、１３を参照するため（ｍｙ  ｎｅｗ、独自の管理によるオブジェクトの生成）の情報（ポインタ）３１、３２、３３が付加される。
【０００７】
これにより、この配列の内容をまとめてファイルに書き出す場合には、コピーをする必要がなくなる。また、複数のオブジェクトが見かけ上別々に保持する内容をまとめてディスクに書き出したり、ファイルの内容を読み込んで複数のオブジェクトを自動的に初期化したりすることが可能になる。具体的には、数ヶ月先までの炉内の各燃料集合体の燃焼度の様子等の炉内の各種の状況を１ケ月ごとに順に計算して解析する場合には、各月の計算では当該月の初期値を使用して各オブジェクトにより計算された燃焼度、中性子分布や密度等の結果が順に書き込まれ、さらに当該月における各オブジェクトの計算が全て終了し、次の１ケ月の解析を開始する際には、ベースアドレスに書き込まれてある既に解析が終了した直前の月の結果が各オブジェクトに初期値として読み出されることとなる。
【０００８】
ただこの場合には、メモリ管理はハードウェアに近い、いわゆる「低レベル」の操作、処理であるため、オブジェクト指向で目指す隠蔽性を損う危険性がある。例えば、何らかの原因により各オブジェクトが保有するメモリ空間が重複した場合には、あるオブジェクトが自分のメンバ変数（当該オブジェクト内のデータを保持するためのフィールド）を書き換えると、他のオブジェクトのメンバ変数も変化していたということにもなりかねない。
【０００９】
具体的には、前記の計算例で言えば、与えられた初期条件を基に多数のオブジェクトからなる最初の１ケ月を計算し、その計算結果を新たに初期条件として同じく多数のオブジェクトからなる次の１ケ月（第２ヶ月）を計算する場合に、最初の１ケ月の計算処理において、あるオブジェクトがその計算結果に基づいて当該オブジェクトが次の月の計算を実行する際に使用する目的でその計算に関連ある初期条件の一部のデータでも書き換える（あるいは更新してしまう）様なことが生じれば、最初の１ケ月の計算処理において後続する他のオブジェクトは元々の初期条件を使用して最初の１ケ月目の担当する部分や内容の計算を行うことが出来なくなることが生じかねない。
【００１０】
ところが、現実の大規模な計算では、オブジェクトは数が多い上に相互に関連しあっていることが多く、さらに例えば繰返し計算では繰返しの回数も多いのが普通である。一方、オブジェクト指向言語を用いたプログラミングモデルは抽象度が高い。その結果、かかることが生じないようにするには、細心の注意が必要となり、プログラマーの負担も大きくなる。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
このため、オブジェクト指向言語を用いた抽象度の高いそして大規模なプログラミングモデルにおいて、オブジェクト指向で目指す隠蔽性が損われず、しかもメモリへのアクセス回数が少なく、また必要な記憶装置も少なくて済み、計算費用、処理速度等も優れるオブジェクト指向メモリ管理方法の開発が望まれていた。
【課題を解決するための手段】
【００１２】
本発明は、以上の課題を解決することを目的としてなされたものであり、メモリの確保作業を最小限とするため、内容に隠蔽性を有するオブジェクトにメモリを確保させ、さらに各オブジェクトにメモリを分配する際に内容に隠蔽性を有するオブジェクトと同一メモリを示すサブセットオブジェクトを分配するようにしたものである。
以下、各請求項の発明を説明する。
【００１３】
請求項１に記載の発明は、
各オブジェクトが計算時にアクセスを必要とするメモリ領域が連続して確保されたアレイオブジェクトが作成され、
各オブジェクトには、当該オブジェクトが計算時に前記メモリ領域へアクセスするための参照情報が前記アレイオブジェクトをスライシングして割り当てられ、
さらに各オブジェクトは前記参照情報を基に前記アレイオブジェクトの当該参照情報に該当するメモリ領域を更新することを特徴とするオブジェクト指向メモリ管理方法である。
【００１４】
本請求項の発明では、各オブジェクトは、計算時にアクセスを必要とするメモリ領域が連続して確保されたアレイオブジェクトをスライシング（ｓｌｉｃｉｎｇ、分割）して作成された参照情報を基にアレイオブジェクトの当該参照情報に該当する部分を更新する。このため、オブジェクト指向言語を使用した計算処理において、オブジェクト指向で目指す隠蔽性が損われず、ひいては他のオブジェクトの保持する参照情報が書き換えられることがない。
また、メモリの断片化が促進されることがなく、そのためメモリへのアクセス回数が少なくて済み、メモリ管理のために必要なプログラミング上の困難性を排除でき、必要な記憶装置も少なくて済むため、計算費用、保守性、処理速度等も優れる。
【００１５】
請求項２に記載の発明は、前記のオブジェクト指向メモリ管理方法であって、
前記アレイオブジェクトが確保するメモリ領域の参照情報は、ｍ個のｎ次元行列にて表現されており、
前記スライシングは、前記ｎ次元行列にて表現された参照情報を単位として行われるものであることを特徴とするオブジェクト指向メモリ管理方法である。
【００１６】
本請求項の発明においては、各計算オブジェクトへのメモリ領域の割り当てには概念的には１直線に連続して並んだｍ個の参照情報をスライシングして、さらにスライシングされた各データはメモリ領域をｎ次元行列にて表現しているため、各計算オブジェクトに割り当てられたメモリ領域の重複が発生しないようにすることが容易となる。なおここに、ｍ（行列の個数）とｎ（次元）は、計算オブジェクトの個数、メッシュ分割等に応じて適宜最適な値とされるが、共に正整数である。
また、ｎ次元行列で表現すると、多数の種類のデータの記憶、書き換えを行、列を単位として行うことが容易となり、プログラム作成も容易となる。
なお、１次元の参照情報やデータをｎ次元行列にて表現することは、例えば１列に並んだ１００個の参照情報等を１０×１０ずつ配列して２次元化する様に、１次元の参照情報等を適宜分割して作成される。
【００１７】
請求項３に記載の発明は、前記のオブジェクト指向メモリ管理方法であって、
前記アレイオブジェクトはクラス定義部を有し、該クラス定義部の作用の下で、前記各オブジェクトの前記メモリ領域へのアクセスによるデータの入出力が行われるものであることを特徴とするオブジェクト指向メモリ管理方法である。
【００１８】
本請求項の発明においては、クラス定義部のメモリ分配に対する調整処理等の作用の下で、複数のオブジェクトが見かけ上別々に保持する内容をまとめてディスクに書き出したり、ファイルの内容を読み込んで複数のオブジェクトを自動的に初期化したりすることがなされる。そのため、複雑な計算に際して、各オブジェクトのメモリへのアクセス回数が減少し、計算時間が短縮される。
【００１９】
請求項４に記載の発明は、
請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法を採用していることを特徴とする解析プログラムである。
【００２０】
本請求項の発明においては、請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法を採用しているため、各種のオブジェクトが複雑な繰返し計算を何度も行う様な解析プログラムにおいて、演算に必要なメモリそのものが節約可能となり、メモリへのデータの入出力の管理も楽となり、メモリアクセスに必要な時間の短縮もなされる。ひいては、処理時間の短縮、処理コストの低下が達成される。
なお、実際に解析を行うプログラムと参照情報を管理するオブジェクトとの結びつきは、すなわち計算時にアクセスを必要とするメモリ領域が連続となるように確保されたアレイオブジェクトをスライシングして参照情報を作成するために、例えば、「Ｂｌｉｔｚ＋＋ 」や「ｂｏｏｓｔ」等の公開の技術を用いる。
【００２１】
請求項５に記載の発明は、前記の解析プログラムであって、
前記解析プログラムは、解析対象をメッシュ分割し、各メッシュに同じ内容の計算を行い、計算に必要なデータと計算結果についてのメモリの管理はｍ個のｎ次元にて表現された参照情報で特定されるメモリ領域を使用して行われ、さらに前記メモリの管理は請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法にてなされるものであることを特徴とする解析プログラムである。
【００２２】
本請求項の発明においては、解析対象がメッシュ分割されているため、該メッシュ分割に対応した行列により表現された参照情報を作成し、これにより記憶領域へのアクセス、データの管理を行うようにして、効率化を図っている。
【００２３】
請求項６に記載の発明は、前記の解析プログラムであって、
原子炉炉心特性解析プログラムであることを特徴とする解析プログラムである。
【００２４】
原子炉の炉心解析プログラムは、膨大なデータを使用して同じ計算を多数回繰返し、さらに計算結果の書き換えも多いため、請求項４または請求項５の発明を使用すれば、データの管理のみならずプログラムの作成、修正、チェックに最適なものとなる。
【００２５】
請求項７に記載の発明は、
原子炉の炉心を水平方向（２次元）と上下方向（１次元）からなる３次元にメッシュ分割し、各メッシュに初期値としての各種物理量を記憶し、また記憶した初期値を基にそれらの経時変化を計算し、さらに該計算の際に請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法を採用している原子炉炉心特性解析プログラムであって、
前記初期値としての各種物理量と計算された経時毎の物理量についての各メッシュのメモリの管理が、ｍ個のｎ次元行列で表現された参照情報で定まる記憶領域においてなされるものであることを特徴とする原子炉炉心特性解析プログラムである。
【００２６】
原子炉の炉心解析プログラムは、膨大なデータを使用して同じ計算を多数回繰返し、さらに計算結果の書き換えも多いため、請求項１ないし請求項３のいずれかに記載のオブジェクト指向メモリ管理方法を採用し、さらに前記初期値としての各種物理量および計算された経時毎の物理量の各メッシュの記憶の管理が、ｍ個のｎ次元行列で表現された参照情報で定まる記憶領域においてなされるため、データの管理のみならずプログラムの作成、修正、チェックが容易になる。
【００２７】
請求項８に記載の発明は、前記の原子炉炉心特性解析プログラムであって、
各メッシュについて、前記ｎ次元行列で表現された参照情報で定まる記憶領域に記憶されているデータを使用して計算を行い、また計算結果を格納するステップを有していることを特徴とする原子炉炉心特性解析プログラムである。
【００２８】
解析は、各メッシュについて、前記ｎ次元行列で表現された参照情報で定まる記憶領域に記憶されているデータを使用して計算を行い、また計算結果を格納するものであるため、請求項７の発明の特徴が最も発揮され易くなる。
【００２９】
請求項９に記載の発明は、前記の原子炉炉心特性解析プログラムであって、
各メッシュについて繰返し計算を行うステップを有していることを特徴とする原子炉炉心特性解析プログラムである。
【００３０】
繰返し計算であるため、データの使用、書き換えも繰返しなされることとなる。この際、メモリ領域の参照情報がｎ次元行列で作成されているため、請求項７、請求個８の発明の特徴が一層発揮される。
【発明の効果】
【００３１】
本発明においては、オブジェクト指向言語を用いた抽象度の高いそして大規模なプログラミングモデルにおいて、元のオブジェクトと同一のメモリ空間を共有するサブセットオブジェクトを使用してメモリを管理するので、元のオブジェクトの隠蔽性を損うことなく効率的なメモリの管理がなされることとなる。
このため、隠蔽性を損うことにより、１のオブジェクトが他のオブジェクトに必要なデータを書き換えてしまう等の各種の不都合が生じなくなる。
また、計算に必要なメモリの量も少なくて済み、さらにメモリへのアクセス時間も短縮されるため、計算費用は少なくなり、計算速度は向上する。
また、メモリ管理にサブセットオブジェクトを用いるため、計算コード内に複雑なメモリ管理機構を設ける必要がなく、その結果計算コードの構造が簡単となるため、保守性の向上にも寄与する。
【００３２】
また、原子炉炉心解析プログラム等の、メッシュ分割された物等を対象として各所の計算が繰返し行われ、この際相互に関連する多種かつ多数のデータの使用、書き換え、記憶等を大規模に行う必要がある解析プログラムにおいては、連続した記憶領域を確保すると共に、各計算オブジェクトが必要とする前記記憶領域についての割り当てられた場所の参照情報がｎ次元の行列で与えられるため、計算速度の向上、計算費用の削減が可能となるのみならず、プログラムの作成も容易となる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明をその最良の実施の形態に基づいて説明する。なお、本発明は、以下の実施の形態に限定されるものではない。本発明と同一および均等の範囲内において、以下の実施の形態に対して種々の変更を加えることが可能である。
【００３４】
（原理の説明）
本実施の形態のオブジェクト指向のメモリ管理方法の原理を、図面を参照しつつ説明する。図３は、各オブジェクト２１、２２、２３へのメモリの分配を概念的に示す図である。図３において、４０はアレイオブジェクトであり、４９はクラス定義部である。アレイオブジェクト４０は、各オブジェクト２１、２２、２３が持つべきメモリ領域の集合体を管理しており、各オブジェクト２１、２２、２３にそれらが持つべきメモリ領域に対応する割当参照情報（Ｓｕｂｓｅｔ  ｒｅｆｅｒｅｎｃｅ）であるサブセット参照情報４１、４２、４３を割当てている。またこのため、多数の２次元のサブセット参照情報を、一次元的に配列して（重ねて）メモリ内に保持している。
このため、各オブジェクト２１、２２、２３は、自身のサブセット参照情報４１、４２、４３を介してアレイオブジェクト４０と同一のメモリ空間を共有することとしている。なお、各オブジェクト２１、２２、２３は、実際の操作を行う実施部（関数）を有しているが、自明かつ図が煩雑となるため、図３では示していない。
【００３５】
各オブジェクト２１、２２、２３が自分に割当てられたサブセット参照情報４１、４２、４３を変更すると、アレイオブジェクト４０の対応するサブセット（本体）の内容も変更される。ただし、他のオブジェクトのサブセット参照情報（および本体）の内容は保護されている。
さらに、各サブセット参照情報４１、４２、４３に対応するメモリのアドレスは重複せず、各オブジェクト２１、２２、２３がメモリへ書き込んだり、メモリから読み出したりするデータの分配、制御については、アレイオブジェクト４０のクラス定義部４９において集約してなされる。
【００３６】
（多数の計算オブジェクトを有する場合）
次に、多数の計算オブジェクトを有する場合における各オブジェクトの管理方法とファイルアクセス方法の様子を、図４を参照しつつ説明する。図４は、この様子を概念的に示す図である。図４において、４０は、各オブジェクト２１、２２、２３が持つべきメモリ領域についての情報の集合体であるアレイオブジェクトであり、４４はメモリ領域である。このアレイオブジェクト４０は１次元配列であり、このアレイオブジェクト４０をスライシングにより分割して（そのサブセットとして）作成したオブジェクトが各オブジェクト２１、２２、２３に参照情報として付与され、さらにメモリ領域４４も同じくスライシングにより分割されて参照情報（サブセット）として作成されたオブジェクトに、参照情報に対応する領域が付与されている。このため、その長さは各オブジェクト２１、２２、２３が持つべきメモリ領域についての情報に等しく、この情報に基づいて各オブジェクト２１、２２、２３に連続したメモリ領域（連続したヒープ領域）が確保されている。さらに、アレイオブジェクト４０、メモリ領域４４のいずれもスライシングにより分割されているため、メモリの競合は原理的に生じないこととなる。
【００３７】
（サンプルコード）
以上の動作概念を、図５に示すサンプルコードを用いて説明する。このコードは、Ｃ＋＋を使用して、大きさ（４，３，２）の３次元配列オブジェクトＡを確保し，次の２つの方法でＡの内容を変更している。
１．オブジェクトＡの内容を明示的に変更する。これを、図５の上に示す。
２．オブジェクトＡの部分要素である大きさ（３，２）の２次元配列への参照情報を取出し、４つのブロックオブジェクトに配置し、各ブロックオブジェクトが内部変数であるオブジェクトＡの部分配列に対して内容を変更する。これを、図５の下に示す。
【００３８】
以下、図５の上のサンプルコードを説明する。
１〜５行で、スライシングを行うために、”ｂｌｉｔｚ＋＋”というテンプレートライブラリのための初期化を行っている。
７行目で、ＲＥＡＬ型を、実質的にはｆｌｏａｔの別名を定義している。
９〜３３行目が、「ブロック」オブジェクトの定義部であり、図３における４９であり、２１、２２、２３の挙動を定義する部分である。
【００３９】
１６〜２１行目で、図３における”Ｓｒ”の挙動を定義している。これは、いわゆるコンストラクタであり、オブジェクト２１等を生成するときのメソッドであり、その引数として（図３の４０に相当する）分割対象オブジェクトａとその切り出し位置についての情報ｐｏｓの２つが渡される。これにより、例えば図３の２１のオブジェクトの生成について言えば、１９行目で自分が持つ参照情報４１（１２行目で定義されているａｒｒａｙで、２次元配列を示すオブジェクト）に対してｒｅｆｅｒｅｎｃｅメソッドを起動し、”ａ（ｐｏｓ，Ｒａｎｇｅ：：ａｌｌ（），Ｒａｎｇｅ：：ａｌｌ（））”で作られた４０の一部分に対する参照情報を４１に割り当てる。この結果、４１のａｒｒａｙは４０の部分配列の化身となり、メモリ空間が共有されることとなる。
２３〜３２行目で、ｆｕｎｃｌメソッドを定義している。メンバ変数ａｒｒａｙに対して操作しているが、実質的にはメモリ空間を共有している別のグローバルオブジェクトの一部分が変更される。
【００４０】
図５の下のサンプルコードの内容を説明する。
３６〜６１行目がテストプログラム本体であり、本コードをコンパイルした実行モジュールを走らせると、最初に３６行目に制御が移る。
３８行目で、３次元配列ａへのポインタを宣言している。また、ブロックオブジェクトへのポインタ配列へのポインタを定義している。
４１行目において、グローバル配列オブジェクトａを定義している。各次元の大きさとしてそれぞれ４、３、２としているが、最初の４が長さであり、３と２は３×２の２次元配列の各次元の長さである。即ち、３×２の２次元配列が４個確保されている。
【００４１】
４３〜５０行目で、３次元配列に対して値を設定している。
５１行目において、３次元配列（オブジェクト）ａの内容を表示している。
５２行目において、そのデータ構造を表示している。これを図６の”Ｄｕｍｐ  ｏｆ．．．”行から”ｉｓ  Ｓｔｏｒａｇｅ  Ｃｏｎｔｉｇｕｏｕｓ（）”までに示す。
５５〜５９行目において、図３の２１に相当する参照オブジェクトを、グローバル配列ａのスライシングとして生成している。このため、ｂのｆｕｎｃｌメソッドにより、各オブジェクトのローカル変数４１に対する操作は、実は４０の該当する箇所を変更していることとなる。
６１行目では、５５〜５９行目で行った操作の副作用｛関数において、戻り値を求める以外の動作（値の表示等）の効果｝が現れている。
【００４２】
図６に、図５に示すサンプルコードの実行結果を示す。前記１．２．のいずれの場合も結果的にオブジェクトＡの内容を変更するが、後者２．では配列ａが実質的に隠蔽され、各ブロックオブジェクトの独立性が確保される形となっており、プログラム上のメリットが得られる。なお、最初の６個は、情報は更新されているが、同じ値だったので表面的に変化が無かったように見えている。
【００４３】
（炉心解析コードへの応用）
以上を、原子炉の炉心解析プログラムを例に採って説明する。
加圧水型の原子炉の炉心解析においては、１／４炉心を対象に、ＸＹ（水平）方向には燃料格子（約１．２６ｃｍ）程度の幅で３００×３００に、Ｚ（軸、上下）方向には１５ｃｍ程度の幅で３０に、即ち３次元配列としてａ（３００、３００、３０）のメッシュ分割がなされる。そして、各メッシュについて中性子束、各核種の数密度、燃焼度、燃料情報等の物理量が保持され、さらにそれら物理量の経時的な変化が計算されることとなる。
【００４４】
図４の各オブジェクト２１、２２、２３は、前記炉心内の１／４集合体単位で分割した単位（ノード）を表現し、その内部において計算メッシュが用意され、各種データが保持されている。
これらのデータは、各オブジェクト２１、２２、２３が計算を開始するに際して別途供給されるリスタートファイルに記録する必要があるため、各オブジェクト２１、２２、２３に分散しているメモリ断片の一部はアレイオブジェクト４０のサブセット参照情報（サブアレイ）４１として準備する。このために、１次元配列で定義されるメモリは、分割されて各オブジェクト２１、２２、２３に埋め込まれる。これにより、各オブジェクト２１、２２、２３でのメモリの変更は、アレイオブジェクト４０の中の１次元配列に自動的に反映される。
【００４５】
なお、実際の計算では、前記３次元配列としてのａ（３００、３００、３０）のメッシュ分割は、ｂ（２７０００、１０、１０）として管理する。つまり、（１０、１０）の２次元配列が２７０００個（Ｘ、Ｙ、Ｚ方向に各３０個存在する）あるものとして管理する。つまり、図４の４０のような、（１０、１０）の２次元配列が２７０００個１次元的に（１列に）並んだ１次元オブジェクト配列となり、（１０、１０）の部分が４１に相当する。
この結果、各メッシュの計算において、各オブジェクトは参照情報として与えられた（１０、１０）の領域のデータを参照して計算し、当該領域のデータの書き換えを行うこととなる。このため、１個の巨大な情報のコンテナを取り扱うよりも柔軟性が増すことともなる。
【図面の簡単な説明】
【００４６】
【図１】各オブジェクト用に個別に特定のアドレス（メモリ領域）を確保して割当て、さらにその結果メモリの断片化が発生している様子を概念的に示す図である。
【図２】別途一連の大きなメモリを確保し、各オブジェクトには当該メモリ領域への参照情報を割当てている様子を概念的に示す図である。
【図３】別途一連の大きなメモリを確保したクラス定義部を有するアレイオブジェクトを有し、各オブジェクトにアレイオブジェクトの参照情報を割当てている様子を概念的に示す図である。
【図４】各オブジェクトにおける部分配列への参照情報と全体配列との関係を概念的に示す図である。
【図５】本発明の実施の形態としてのサンプルコードである。
【図６】図５に示すサンプルコードの動作結果である。
【符号の説明】
【００４７】
１０              ベースメモリのアドレス
１１、１２、１３  ヒープ領域のアドレス
２１、２２、２３  オブジェクト１、同２、同３
３１、３２、３３  各オブジェクトが有する参照情報
４０              アレイオブジェクト
４１、４２、４３  各オブジェクト内のサブセット参照情報
４４              メモリ領域
４９              クラス定義部
【図１】
2007188384.tif 000003
【図２】
2007188384.tif 000004
【図３】
2007188384.tif 000005
【図４】
2007188384.tif 000006
【図５】
2007188384.tif 000007
【図６】
2007188384.tif 000008