UnmapViewOfFile 関数 (memoryapi.h)
呼び出し元プロセスのアドレス空間からファイルのマップされたビューのマップを解除します。
構文
BOOL UnmapViewOfFile(
[in] LPCVOID lpBaseAddress
);
パラメーター
[in] lpBaseAddress
マップ解除されるファイルのマップされたビューのベース アドレスへのポインター。 この値は、 MapViewOfFile ファミリの関数の 1 つを前回呼び出した場合に返された値と同じである必要があります。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
ファイルのマップされたビューをマップ解除すると、プロセスのアドレス空間内のビューが占める範囲が無効になり、その範囲が他の割り当てで使用できるようになります。 これにより、プロセスのワーキング セットの一部であったマップされていない各仮想ページのワーキング セット エントリが削除され、プロセスのワーキング セット のサイズが小さくなります。 また、対応する物理ページの共有数もデクリメントされます。
マップされていないビューの変更されたページは、ページを共有するすべてのプロセスのワーキング セットからマップ解除またはトリミングされるまで、共有数が 0 に達するまでディスクに書き込まれません。 それでも、変更されたページはディスクに "遅延" して書き込まれます。つまり、変更はメモリにキャッシュされ、後でディスクに書き込まれる可能性があります。 電源障害やシステムクラッシュが発生した場合のデータ損失のリスクを最小限に抑えるために、アプリケーションは FlushViewOfFile 関数を使用して変更されたページを明示的にフラッシュする必要があります。
アプリケーションは、ファイル マッピング オブジェクトの作成に使用されるファイル ハンドルを閉じる場合がありますが、システムは、ファイルの最後のビューがマップ解除されるまで、対応するファイルを開いたままにします。 最後のビューがまだマップ解除されていないファイルは、共有制限なしで開いたままにされます。
Windows Server 2012では、この関数は次のテクノロジでサポートされています。
テクノロジ | サポートされています |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 Transparent Failover (TFO) | はい |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | はい |
クラスターの共有ボリューム ファイル システム (CsvFS) | はい |
Resilient File System (ReFS) | はい |
例
例については、「 ファイル内でのビューの作成」を参照してください。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | memoryapi.h (Windows.h、Memoryapi.h を含む) |
Library | onecore.lib |
[DLL] | Kernel32.dll |
関連項目
メモリ管理関数