スタックはゼロから伸びていますから、メモリをアロケートするのに一番楽なのは、反対側の端の場所です。最初の値はメモリのうち番号が一番大きい場所に置かれます。ここまでの話では、メモリをアロケート・デアロケートするということのこの文脈における意味を過剰に語ることはありませんでした。詳細を深く掘り下げるのはこのチュートリアルの目的範囲外なのですが、ここで重要なこととして指摘したいのは、ヒープは単にメモリの反対側から伸びるスタックなのではないということです。後ほど例を見ていきますが、ヒープはアロケート・デアロケートをどの順番にしてもよく、その結果「穴」のある状態になります。次の図は、とあるプログラムをしばらく実行していたときのメモリレイアウトです。1この場合では、4つのものをヒープにアロケートしていますが、2つはすでにデアロケートされています。間には、現在使われていない隙間があります。このような隙間がなぜ、どのように起きるかの詳細は、どのようなヒープ管理戦略を使っているかによります。異なるブログラムには異なる「メモリアロケータ」というメモリを管理するライブラリを使うことができます。Rustのプログラムはこの用途にjemallocを使います。私たちのプログラムの例に戻ります。ポインタが指す)メモリはヒープ上にあるので、ボックスをアロケートした関数よりも長い間生存しつづけることができます。この例ではそうではありません。ためのスタックフレームを解放する必要があります。Box<T>には隠れた仕掛け、Dropがあります。DropトレイトのBoxへの実装は、ボックスが作られたときにアロケートされたメモリをデアロケートします。解放されるときには先にヒープ上にアロケートされたメモリを解放します。??????その後スタックフレームが無くなることで、全てのメモリが解放されます。