MapViewOfFile3 関数 (memoryapi.h)
ファイルまたはページファイルに基づくセクションのビューを、指定されたプロセスのアドレス空間にマップします。
この関数を使用すると、新しい割り当てに対して、仮想アドレス空間の範囲と power-of-2 アラインメント制限を指定できます。任意の数の拡張パラメーターを指定します。物理メモリの優先 NUMA ノードを拡張パラメーターとして指定します。プレースホルダー操作 (具体的には置換) を指定します。
NUMA ノードを指定するには、 ExtendedParameters パラメーターを 参照してください。
構文
PVOID MapViewOfFile3(
[in] HANDLE FileMapping,
[in] HANDLE Process,
[in, optional] PVOID BaseAddress,
[in] ULONG64 Offset,
[in] SIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
[in] ULONG ParameterCount
);
パラメーター
[in] FileMapping
指定したプロセスのアドレス空間にマップされるセクションへの HANDLE 。
[in] Process
セクションがマップされるプロセスへの HANDLE 。
[in, optional] BaseAddress
ビューの目的のベース アドレス。 アドレスは、最も近い 64k 境界に切り捨てられます。
注意
このパラメーターが NULL の場合、システムはベース アドレスを選択します。
BaseAddress が NULL でない場合、指定されたMEM_ADDRESS_REQUIREMENTSはすべてゼロで構成されている必要があります。
[in] Offset
セクションの先頭からのオフセット。 これは 64k アラインされている必要があります。
[in] ViewSize
マップするバイト数。 0 の値は、セクション全体をマップすることを指定します。
サイズは常にページ サイズの倍数である必要があります。
[in] AllocationType
メモリ割り当ての種類。 このパラメーターには、ゼロ (0) または次のいずれかの値を指定できます。
値 | 意味 |
---|---|
|
予約ビューをマップします。 |
|
プレースホルダーをマップされたビューに置き換えます。 data/pf-backed セクション ビューのみがサポートされています (イメージ、物理メモリなどはサポートされていません)。 プレースホルダーを置き換える場合、 BaseAddress と ViewSize はプレースホルダーのものと完全に一致する必要があり、指定された MEM_ADDRESS_REQUIREMENTS 構造体はすべてゼロで構成されている必要があります。
プレースホルダーをマップされたビューに置き換えた後、そのマップされたビューをプレースホルダーに戻すには、UnmapViewOfFileEx および UnmapViewOfFile2 の UnmapFlags パラメーターを参照してください。 プレースホルダーは、予約済みメモリ領域の一種です。 このフラグが指定されている場合、 Offset と BaseAddress の 64k アラインメント要件は適用されません。 |
|
大きなページ ビューをマップします。 このフラグは、 大きなページのサポートを使用してビューをマップする必要があることを指定します。 ビューのサイズは 、GetLargePageMinimum 関数によって報告される大きなページのサイズの倍数である必要があり、ファイル マッピング オブジェクトは SEC_LARGE_PAGES オプションを使用して作成されている必要があります。 BaseAddress パラメーターに null 以外の値を指定する場合、値は GetLargePageMinimum の倍数である必要があります。 |
[in] PageProtection
目的のページ保護。
SEC_IMAGE属性を使用して作成されたファイル マッピング オブジェクトの場合、PageProtection パラメーターは無効であり、PAGE_READONLYなどの有効な値に設定する必要があります。
[in, out, optional] ExtendedParameters
MEM_EXTENDED_PARAMETER型の 1 つ以上の拡張パラメーターへの省略可能なポインター。 これらの拡張パラメーター値はそれぞれ、MemExtendedParameterAddressRequirements または MemExtendedParameterNumaNode のいずれかの Type フィールドを持つことができます。 MemExtendedParameterNumaNode 拡張パラメーターが指定されていない場合、動作は VirtualAlloc/MapViewOfFile 関数と同じです (つまり、物理ページに推奨される NUMA ノードは、メモリに最初にアクセスするスレッドの理想的なプロセッサに基づいて決定されます)。
[in] ParameterCount
ExtendedParameters が指す拡張パラメーターの数。
戻り値
成功した場合は、マップされたビューのベース アドレスを返します。 それ以外の場合は NULL を 返し、拡張エラーの状態は GetLastError を使用して使用できます。
注釈
この API は、仮想アドレス空間の管理に関する特定の要件を持つハイパフォーマンス ゲームとサーバー アプリケーションをサポートするのに役立ちます。 たとえば、以前に予約されたリージョンの上にメモリをマッピングする場合などです。これは、リング バッファーを自動的にラップするを実装する場合に役立ちます。 特定のアラインメントを使用してメモリを割り当てる。たとえば、アプリケーションが大規模または巨大なページ マップ領域をオンデマンドでコミットできるようにする場合などです。
例
コード例については、「 VirtualAlloc2 のシナリオ 1」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10バージョン 1803 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2016 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | memoryapi.h (Windows.h を含む) |
Library | onecore.lib |
[DLL] | Kernel32.dll |
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示