メモリの動的割り当てと解放のようす

ヒープ領域上にメモリを確保したり、それを解放したりするとどのようにヒープ領域のようすが変化するのかを図示してみます。

まず、プログラム実行開始直後はヒープ領域の全体が未使用の状態です:

901x176(2822bytes)
初期状態

ここで、動的メモリ割り当ての機構を利用して2000バイトのメモリを確保すると、次の図のようになります。この時確保した領域を A とします。

901x176(3356bytes)
2000バイト確保したところ

次に、4000バイトのメモリを確保すると、次の図のようになります。この時確保した領域を B としましょう。

901x176(3533bytes)
4000バイト確保したところ

さらに続けて、3000バイトのメモリを確保すると、次の図になります。この時確保した領域を C と呼びましょう。

901x176(3558bytes)
3000バイト確保したところ

A, B, C の順番でメモリ領域を確保してきましたが、解放はこの順番に関係なくできます。 そこで、B の領域(4000バイト)を解放すると、次の図のようになります。

901x176(3600bytes)
4000バイト解放したところ

解放された領域は、あとで再利用できます。 例えば、次に 1800バイトを確保するとして、 その時にさきほど解放された領域の一部が使われる可能性があります。 その場合、下の図のようになります。

901x176(3702bytes)
1800バイト確保したところ

さきほどまで B という領域が確保されていた場所の一部に新たな領域 D が確保されました。