ヒープ領域上にメモリを確保したり、それを解放したりするとどのようにヒープ領域のようすが変化するのかを図示してみます。
まず、プログラム実行開始直後はヒープ領域の全体が未使用の状態です:
初期状態 |
ここで、動的メモリ割り当ての機構を利用して2000バイトのメモリを確保すると、次の図のようになります。この時確保した領域を A とします。
2000バイト確保したところ |
次に、4000バイトのメモリを確保すると、次の図のようになります。この時確保した領域を B としましょう。
4000バイト確保したところ |
さらに続けて、3000バイトのメモリを確保すると、次の図になります。この時確保した領域を C と呼びましょう。
3000バイト確保したところ |
A, B, C の順番でメモリ領域を確保してきましたが、解放はこの順番に関係なくできます。 そこで、B の領域(4000バイト)を解放すると、次の図のようになります。
4000バイト解放したところ |
解放された領域は、あとで再利用できます。 例えば、次に 1800バイトを確保するとして、 その時にさきほど解放された領域の一部が使われる可能性があります。 その場合、下の図のようになります。
1800バイト確保したところ |
さきほどまで B という領域が確保されていた場所の一部に新たな領域 D が確保されました。