Next: メモリの状態遷移
Up: メモリ管理
Previous: メモリ管理
図B.1に示すように,メモリ管理はメモリの状態遷移
という概念に基づいて行なわれる。
メモリは関数呼び出しによって
- 1.
- SYS状態 (OSによって管理されている状態)
- 2.
- TMP状態 (malloc()によってOSからメモリを確保した状態)
- 3.
- VAR状態 (変数に代入された状態)
- 4.
- REV状態 (メモリ管理リストに登録された状態)
4つの状態を遷移する。状態遷移に関係する関数について説明する。
- MaDef()はmalloc()を使ってOSからメモリを確保する。
状態はSYSからTMPに移る。この状態の全てのメモリは,
後述するMatTmpUndef()が呼び出されると,REV状態に
移る。
- MatDestroy()はfree()を使って,全ての状態のメモリを
解放してOSに戻す。すなわち,状態はSYSに移る。
- MatAssign()によってTMP状態のメモリはVAR状態
に移る。これは変数に代入されたことを意味し,VAR状態の
メモリは,MatTmpUndef()が呼び出されても,影響されない。
MatAssign()の後でMatTmpUndef()が呼び出され,
全てのTMP状態のメモリがREV状態に移る。
- 数MatFree()によってVAR状態のメモリがTMP状態
に移動する。これは変数の値が必要でなくなったことを意味する。
- MatUndef()とMatInstall()によってTMP状態の
メモリはREV状態に移り,メモリ管理リストに登録される。
- MatRequest()によりREV状態のメモリはTMP状態
に移る。一般に,関数MatRequest()は関数MatDef()より高速
である。
行列クラスライブラリにおいてメモリが必要になった場合,まず,メモリ管理リス
トを調べて適当な大きさの行列が登録されていれば,そのメモリを用い,
適当な大きさの行列が登録されていなければ,OSからメモリを確保する。
このメモリ管理機構によって,関数malloc()とfree()が呼ばれる
回数を減らし,内部処理の高速化を行なっている。特に,この方法はシミュレー
ションのように同じプログラムが繰り返し呼ばれる場合に有効である。
Masanobu KOGA
平成10年8月19日