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 |
---|---|
|
Memetakan tampilan yang dipesan. |
|
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. |
|
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk