|
A.9.2 データ構造およびメモリ管理
Mathematicaの式は内部では,先頭が頭部への,残りが以下に続く要素への連続したポインタの配列から構成されている.
各々の式はパターンマッチングと評価に使用されるハッシュ記号の特殊な形式を含んでいる.
各々の記号に対し,記号に関するすべての情報を保存している記号一覧表がある.
記号列や数値等のほとんどのオブジェクトは別々に割り当てられている.ただし,小さな整数や計算途中で生成された近似数値はユニークに複製保存されている.
Mathematicaで使用されたすべてのメモリは何回参照されたかの情報が保持されている.この回数が0になったとき,メモリは自動的に解放される.
式の要素を連続して保存することによりメモリの断片化とスワッピングを防ぐことができる.ただし,長い式の場合に単一の要素だけが変更されたときもポインタの配列全体をコピーしてしまう.これを防ぐために参照回数および予備割当てに基づく多くの最適化がなされている.
大きなまたはネストされた数値のリストは,マシンサイズの整数または実数のパックされた配列として,必要に応じて自動的に保存される.Mathematicaのコンパイラは,そのようなパックされた配列に反復されて適用される複雑な関数を自動的にコンパイルする.MathLink,DumpSave, Displayおよび 様々なImport とExportフォーマットは,パックされた配列を外部的に使用する.
|