Fungsi MapViewOfFile3 (memoryapi.h)

Memetakan tampilan file atau bagian yang didukung pagefile ke ruang alamat proses yang ditentukan.

Dengan menggunakan fungsi ini, Anda dapat: untuk alokasi baru, menentukan rentang ruang alamat virtual dan pembatasan perataan daya 2; tentukan jumlah parameter yang diperluas secara arbitrer; tentukan simpul NUMA pilihan untuk memori fisik sebagai parameter yang diperluas; dan tentukan operasi tempat penampung (khususnya, penggantian).

Untuk menentukan simpul NUMA, lihat parameter ExtendedParameters .

Sintaks

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
);

Parameter

[in] FileMapping

HANDLE ke bagian yang akan dipetakan ke ruang alamat proses yang ditentukan.

[in] Process

HANDLE ke proses di mana bagian akan dipetakan.

[in, optional] BaseAddress

Alamat dasar tampilan yang diinginkan. Alamat dibulatkan ke bawah ke batas 64k terdekat.

Catatan

Jika parameter ini NULL, sistem akan memilih alamat dasar.

Jika BaseAddress bukan NULL, maka MEM_ADDRESS_REQUIREMENTS yang disediakan harus terdiri dari semua nol.

[in] Offset

Offset dari awal bagian. Ini harus sejajar 64k.

[in] ViewSize

Jumlah byte yang akan dipetakan. Nilai nol (0) menentukan bahwa seluruh bagian akan dipetakan.

Ukuran harus selalu kelipatan ukuran halaman.

[in] AllocationType

Jenis alokasi memori. Parameter ini bisa nol (0) atau salah satu nilai berikut.

Nilai Makna
MEM_RESERVE
0x00002000
Memetakan tampilan yang dipesan.
MEM_REPLACE_PLACEHOLDER
0x00004000
Mengganti tempat penampung dengan tampilan yang dipetakan. Hanya tampilan bagian yang didukung data/pf yang didukung (tidak ada gambar, memori fisik, dll.). Saat Anda mengganti tempat penampung, BaseAddress dan ViewSize harus sama persis dengan tempat penampung, dan struktur MEM_ADDRESS_REQUIREMENTS yang disediakan harus terdiri dari semua nol.

Setelah Anda mengganti tempat penampung dengan tampilan yang dipetakan, untuk membebaskan tampilan yang dipetakan kembali ke tempat penampung, lihat parameter UnmapFlags dari UnmapViewOfFileEx dan UnmapViewOfFile2.

Tempat penampung adalah jenis wilayah memori yang dipesan.

Persyaratan penyelarasan 64k pada Offset dan BaseAddress tidak berlaku saat bendera ini ditentukan.

MEM_LARGE_PAGES
0x20000000
Memetakan tampilan halaman besar. Bendera ini menentukan bahwa tampilan harus dipetakan menggunakan dukungan halaman besar. Ukuran tampilan harus kelipatan dari ukuran halaman besar yang dilaporkan oleh fungsi GetLargePageMinimum , dan objek pemetaan file harus dibuat menggunakan opsi SEC_LARGE_PAGES . Jika Anda memberikan nilai non-null untuk parameter BaseAddress , maka nilainya harus kelipatan GetLargePageMinimum.

[in] PageProtection

Perlindungan halaman yang diinginkan.

Untuk objek pemetaan file yang dibuat dengan atribut SEC_IMAGE , parameter PageProtection tidak berpengaruh, dan harus diatur ke nilai yang valid seperti PAGE_READONLY.

[in, out, optional] ExtendedParameters

Penunjuk opsional ke satu atau beberapa parameter jenis MEM_EXTENDED_PARAMETER yang diperluas. Masing-masing nilai parameter yang diperluas itu sendiri dapat memiliki bidang Jenisdari MemExtendedParameterAddressRequirements atau MemExtendedParameterNumaNode. Jika tidak ada parameter perluasan MemExtendedParameterNumaNode yang disediakan, maka perilakunya sama dengan untuk fungsi VirtualAlloc/MapViewOfFile (yaitu, simpul NUMA pilihan untuk halaman fisik ditentukan berdasarkan prosesor ideal utas yang pertama kali mengakses memori).

[in] ParameterCount

Jumlah parameter yang diperluas yang diacu oleh ExtendedParameters.

Nilai kembali

Mengembalikan alamat dasar tampilan yang dipetakan, jika berhasil. Jika tidak, mengembalikan NULL dan status kesalahan yang diperluas tersedia menggunakan GetLastError.

Keterangan

API ini membantu mendukung game berkinerja tinggi, dan aplikasi server, yang memiliki persyaratan khusus sekeliling mengelola ruang alamat virtual mereka. Misalnya, memetakan memori di atas wilayah yang dipesan sebelumnya; ini berguna untuk menerapkan buffer cincin pembungkusan secara otomatis. Dan mengalokasikan memori dengan keselarasan tertentu; misalnya, untuk memungkinkan aplikasi Anda menerapkan wilayah besar/besar yang dipetakan halaman sesuai permintaan.

Contoh

Untuk contoh kode, lihat Skenario 1 di VirtualAlloc2.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10, versi 1803 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2016 [hanya aplikasi desktop]
Target Platform Windows
Header memoryapi.h (termasuk Windows.h)
Pustaka onecore.lib
DLL Kernel32.dll

Lihat juga

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2