仮想メモリの解放

VirtualFree 関数は、次の規則に従ってページをコミットおよび解放します。

  • コミットされた 1 つ以上のページをコミット解除し、ページの状態を予約済みに変更します。 ページのコミット解除は、ページに関連付けられている物理ストレージを解放し、任意のプロセスで割り当てられるようにします。 コミットされたページの任意のブロックをコミット解除できます。
  • 1 つ以上の予約ページのブロックを解放し、ページの状態を解放するように変更します。 ページ ブロックを解放すると、予約済みアドレスの範囲をプロセスによって割り当てることができます。 予約済みページは、 最初に VirtualAlloc によって予約されていたブロック全体を解放することによってのみ解放できます。
  • コミットされた 1 つ以上のページのブロックを同時にデコミットして解放し、ページの状態を解放します。 指定したブロックには、 VirtualAlloc によって最初に予約されたブロック全体を含める必要があり、すべてのページが現在コミットされている必要があります。

メモリ ブロックが解放またはコミット解除された後、そのブロックを再び参照することはできません。 そのメモリに含まれている可能性のある情報は、永遠に失われます。 空きページから読み取ったり、空きページに書き込んだりしようとすると、アクセス違反の例外が発生します。 情報が必要な場合は、その情報を含むメモリのコミットを解除したり、メモリを解放したりしないでください。

メモリ範囲内のデータが関心を持たなくなったことを指定するには、 virtualAllocMEM_RESETで呼び出します。 ページはページング ファイルから読み取られたり、ページング ファイルに書き込まれたりしません。 ただし、メモリ ブロックは後でもう一度使用できます。