ソフトウェアのメモリ管理について
仮想記憶
ページング方式
ページと呼ばれる固定長の単位にプログラムを分割し、必要なものだけメモリにアロケートする。
スワッピング方式
使用されていないプロセスを補助記憶に退避させる。
ページングアルゴリズム
LRU (Least Recently Used)
最後に使われてから一番時間が経過したものをページアウトする。
FIFO (First In First Out)
最初にページインしたものをページアウトする。
LFU (Least Frequently Used)
参照回数が最も少ないものをページアウトする。
スラッシング
フラグメンテーション
メモリリーク
メモリプール
メモリプールとは|memory pool|メモリープール - 意味/解説/説明/定義 : IT用語辞典
コンピュータプログラムの実行時に素早く動的に必要なメモリ領域を確保するために、プログラムの起動時などにメインメモリの空き領域からある程度大きな領域を一括して確保したもの。
固定長方式
- 使われない領域が出やすく空間効率が悪い
- 割り当てや解放にかかる処理時間が短く一定
- フラグメンテーションは発生しない
可変長方式
- メモリ領域を無駄なく活用することができる
- 割り当てや解放にかかる処理時間が長く一定しない
- フラグメンテーションが発生する
スタックとヒープ
メモリ管理 - ヒープ領域とスタック領域の違いについて教えてください - スタック・オーバーフロー
スタックは手続きの呼び出しで利用されます。手続きが呼び出されると、呼び出された手続きのローカル変数を格納するためのフレームがスタック上に生成されます。手続きからリターンすると、そのフレームも不要になります。メモリ領域の確保と解放のタイミングは、後から呼び出された手続きのフレームほど先に解放されます。 従って、スタックを実装するデータ構造としては、先入れ後出し(FILO)のデータ構造である「スタック(同じ名前なのでややこしいかもしれませんが)」がスタックを実装するのに利用されます。 これに対して、ヒープに確保されるメモリ領域は、確保と解放にこのような一定の順序がありません。先に確保したメモリ領域が先に解放されることもあります。そのため、メモリ領域を確保した順序に関係なく解放できる必要があります。 従って、ヒープを実装するデータ構造としては、途中の要素をいつでも削除できるデータ構造であるリストなどが利用されます。