「ヒープ」と言うメモリ空間

最近ではあまり耳にしなくなった「ヒープメモリー(heap memory)」ですが、パソコンが16ビットの時にはよく使いました。

そもそもヒープメモリとは何かというと、コンピュータプログラムが実行時に使用するメモリ領域の一つで、任意に確保や解放を繰り返すことができるメモリを「ヒープ」と言います。

そもそも、コンパイルする言語において変数とか配列は、その大きさ(サイズ)を固定的に確保して変数名や配列の名前にメモリ上のアドレスを紐づけておくわけです。しかし、メモリ領域が今ほど広くないため、固定的に使う値以外は、必要に応じて動的に確保して、使い終わったらメモリを解放して使いました。

ポインタ」と言うのは、アドレスを参照する仕組みで、ポインタ自体は16ビットのOSならば2バイトの大きさの変数になりますが、そのアドレス変数に入っているアドレスを参照することで、指定されたサイズを取得するという仕組みです。その構造体には次のアドレスのためのポインタ変数を用意し、ループしてポインタ変数が「null」になるまで値を取りに行くのがリスト構造の概要となります。

構造的にはCADなどのレイヤは、このような感じで値を保持していると思います。これで、仮に「3」番のデータを削除する場合は、2番のポインタ変数に4番のアドレスをいれて3番の使用領域をヒープに返す処理が「データ削除」になります。

データ量が大きい場合はポインタを双方向にすればいいわけですが、処理が複雑になると判定に時間を取られるので十分な比較テストが必要になるでしょう。

パスコンが16ビットの時ですが、ヒープのメモリを、確保・解放を繰り返すテストをしたとき、だんだん、遅くなってきました。つまり、ヒープが歯抜けになって必要サイズの新規確保場所を見つけるのに時間がかかるようになってしまいました。

こうしたメモリやハードディスクの歯抜けを集めてきれいにする役割を「ガーベジ‐コレクション(garbage collection)」といいます。英語の原義は「ガラクタ集め」のような意味と思います。歯抜けになっている部分をページング、つまりきれいな連続領域に書き直しをして再利用性を高める処理になります。

実を言うと、SSDには「ガーベジ‐コレクション(garbage collection)」を推奨していません。これについては、SSDについて書くときに触れます。