次の方法で共有


MapViewOfFile3 関数 (memoryapi.h)

ファイルまたはページ ファイルでバックアップされたセクションのビューを、指定されたプロセスのアドレス空間にマップします。

構文

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

セクションの先頭からのオフセット。

AllocationType でMEM_LARGE_PAGESを使用する場合は、オフセットを 64k で整列するか、GetLargePageMinimum にアラインする必要があります。 さらに、AllocationType でMEM_REPLACE_PLACEHOLDERが使用されている場合、オフセットは VirtualAlloc2 によって付与される基になるページ サイズに合わせてページアラインする必要があります。

[in] ViewSize

マップするバイト数。 値 0 は、セクション全体をマップすることを指定します。

サイズは常にページ サイズの倍数である必要があります。

[in] AllocationType

メモリ割り当ての種類。 このパラメーターには、ゼロ (0) または次のいずれかの値を指定できます。

価値 意味
MEM_RESERVE
0x00002000
予約済みビューをマップします。
MEM_REPLACE_PLACEHOLDER
0x00004000
プレースホルダーをマップされたビューに置き換えます。 サポートされているのは、データ/pf に基づくセクション ビューのみです (イメージや物理メモリなどはサポートされません)。 プレースホルダーを置き換える場合、BaseAddress と ViewSize はプレースホルダーのものと完全に一致する必要があり、指定された MEM_ADDRESS_REQUIREMENTS 構造体はすべてゼロで構成されている必要があります。

プレースホルダーをマップされたビューに置き換えた後、そのマップされたビューをプレースホルダーに解放するには、UnmapViewOfFileEx と UnmapViewOfFile2の UnmapFlags パラメーター 参照してください。

プレースホルダーは、予約済みメモリ領域の一種です。

このフラグが指定されている場合、OffsetBaseAddress の 64k アライメント要件は適用されません。

MEM_LARGE_PAGES
0x20000000
大きなページ ビューをマップします。 このフラグは、大きなページ サポートを使用してビュー マップする必要があることを指定します。 ビューのサイズは、GetLargePageMinimum 関数によって報告される大きなページのサイズの倍数である必要があり、ファイル マッピング オブジェクトは SEC_LARGE_PAGES オプションを使用して作成されている必要があります。 BaseAddress パラメーターに null 以外の値を指定する場合、値は GetLargePageMinimum倍数である必要があります。

オフセット の 64k アライメント要件は、このフラグが指定されている場合は適用されません。

[in] PageProtection

目的のページ保護。

SEC_IMAGE 属性を使用して作成されたファイル マッピング オブジェクトの場合、PageProtection パラメーターは無効であり、PAGE_READONLYなどの任意の有効な値に設定する必要があります。

[in, out, optional] ExtendedParameters

MEM_EXTENDED_PARAMETER型の 1 つ以上の拡張パラメーターへの省略可能なポインター。 これらの各拡張パラメーター値には、MemExtendedParameterAddressRequirements または MemExtendedParameterNumaNodeType フィールドを持つことができます。 拡張パラメーター MemExtendedParameterNumaNode が指定されていない場合、動作は、VirtualAllocMapViewOfFile 関数と同じです (つまり、物理ページの優先 NUMA ノードは、最初にメモリにアクセスするスレッドの理想的なプロセッサに基づいて決定されます)。

[in] ParameterCount

ExtendedParametersによって指される拡張パラメーターの数。

戻り値

マップされたビューのベース アドレスを返します (成功した場合)。 それ以外の場合は、NULL 返し、拡張エラーの状態は GetLastError使用できます。

備考

この API は、仮想アドレス空間の管理に関する特定の要件を持つ、高パフォーマンスのゲームとサーバー アプリケーションをサポートするのに役立ちます。 たとえば、以前に予約されたリージョンの上にメモリをマッピングする場合などです。これは、リング バッファーを自動的にラップする実装に役立ちます。 そして、特定のアライメントでメモリを割り当てる。たとえば、アプリケーションが大規模/巨大なページ マップ領域をオンデマンドでコミットできるようにします。

新しい割り当てにこの関数を使用すると、次のことができます。

  • 仮想アドレス空間の範囲と 2 乗アライメント制限を指定する
  • 任意の数の拡張パラメーターを指定する
  • 物理メモリの優先 NUMA ノードを拡張パラメーターとして指定する
  • プレースホルダー操作 (具体的には置換) を指定します。

NUMA ノードを指定するには、ExtendedParameters パラメーターを参照してください。

コード例については、「VirtualAlloc2のシナリオ 1」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 10 バージョン 1803 [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2016 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー memoryapi.h (Windows.h を含む)
ライブラリ onecore.lib
DLL Kernel32.dll

関連項目

VirtualAlloc2 の

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2