Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mencadangkan, menerapkan, atau mengubah status wilayah halaman di ruang alamat virtual proses panggilan. Memori yang dialokasikan oleh fungsi ini secara otomatis diinisialisasi ke nol.
Dengan menggunakan fungsi ini, Anda dapat: untuk alokasi baru, menentukan rentang ruang alamat virtual dan pembatasan perataan power-of-2; tentukan jumlah arbitrer parameter yang diperluas; tentukan simpul NUMA pilihan untuk memori fisik sebagai parameter yang diperluas; dan tentukan operasi tempat penampung (khususnya, penggantian).
Untuk menentukan simpul NUMA, lihat parameter
Sintaksis
PVOID VirtualAlloc2FromApp(
[in, optional] HANDLE Process,
[in, optional] PVOID BaseAddress,
[in] SIZE_T Size,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
[in] ULONG ParameterCount
);
Parameter
[in, optional] Process
Handel ke proses. Fungsi ini mengalokasikan memori dalam ruang alamat virtual proses ini.
Handel harus memiliki akses PROCESS_VM_OPERATION yang tepat. Untuk informasi selengkapnya, lihat Keamanan Proses dan Hak Akses.
[in, optional] BaseAddress
Penunjuk yang menentukan alamat awal yang diinginkan untuk wilayah halaman yang ingin Anda alokasikan.
Jika BaseAddressnull, fungsi menentukan tempat untuk mengalokasikan wilayah.
Jika baseAddress tidak NULL, maka struktur MEM_ADDRESS_REQUIREMENTS yang disediakan harus terdiri dari semua nol, dan alamat dasar harus kelipatan granularitas alokasi sistem. Untuk menentukan granularitas alokasi, gunakan fungsi
[in] Size
Ukuran wilayah memori yang akan dialokasikan, dalam byte.
Ukuran harus selalu kelipatan ukuran halaman.
Jika
[in] AllocationType
Jenis alokasi memori. Parameter ini harus berisi salah satu nilai berikut.
| Nilai | Arti |
|---|---|
|
Mengalokasikan biaya memori (dari ukuran keseluruhan memori dan file halaman pada disk) untuk halaman memori cadangan yang ditentukan. Fungsi ini juga menjamin bahwa ketika penelepon awalnya mengakses memori, kontennya akan menjadi nol. Halaman fisik aktual tidak dialokasikan kecuali/sampai alamat virtual benar-benar diakses.
Untuk memesan dan menerapkan halaman dalam satu langkah, panggil Virtual2AllocFromApp dengan Mencoba menerapkan rentang alamat tertentu dengan menentukan MEM_COMMIT tanpa MEM_RESERVE dan NULL non-BaseAddress gagal kecuali seluruh rentang telah dicadangkan. Kode kesalahan yang dihasilkan ERROR_INVALID_ADDRESS. Upaya untuk menerapkan halaman yang sudah diterapkan tidak menyebabkan fungsi gagal. Ini berarti Anda dapat menerapkan halaman tanpa terlebih dahulu menentukan status komitmen saat ini dari setiap halaman. |
|
Mencadangkan berbagai ruang alamat virtual proses tanpa mengalokasikan penyimpanan fisik aktual dalam memori atau dalam file halaman pada disk.
Anda dapat menerapkan halaman yang dipesan dalam panggilan berikutnya ke fungsi Fungsi alokasi memori lainnya, seperti malloc dan LocalAlloc, tidak dapat menggunakan rentang memori yang dipesan hingga dirilis. |
|
Mengganti tempat penampung dengan alokasi privat normal. Hanya tampilan bagian yang didukung data/pf yang didukung (tidak ada gambar, memori fisik, dll.). Saat Anda mengganti tempat penampung, BaseAddress dan Size harus sama persis dengan tempat penampung, dan struktur MEM_ADDRESS_REQUIREMENTS yang disediakan harus terdiri dari semua nol.
Setelah Anda mengganti tempat penampung dengan alokasi privat, untuk membebaskan alokasi tersebut kembali ke tempat penampung, lihat parameter dwFreeTypeVirtualFree dan VirtualFreeEx. Tempat penampung adalah jenis wilayah memori yang dipesan. |
|
Untuk membuat tempat penampung, panggil Tempat penampung adalah jenis wilayah memori yang dipesan. |
|
Menunjukkan bahwa data dalam rentang memori yang ditentukan oleh Menggunakan nilai ini tidak menjamin bahwa rentang yang dioperasikan dengan MEM_RESET akan berisi nol. Jika Anda ingin rentang berisi nol, nonaktifkan memori lalu kirim ulang. Saat Anda menentukan Virtual2AllocFromApp mengembalikan kesalahan jika Anda menggunakan MEM_RESET dan rentang memori dipetakan ke file. Tampilan bersama hanya dapat diterima jika dipetakan ke file halaman. |
|
MEM_RESET_UNDO hanya boleh dipanggil pada rentang alamat yang MEM_RESET berhasil diterapkan sebelumnya. Ini menunjukkan bahwa data dalam rentang memori yang ditentukan oleh Nilai ini tidak dapat digunakan dengan nilai lain. Jika MEM_RESET_UNDO dipanggil pada rentang alamat yang tidak MEM_RESET sebelumnya, perilaku tersebut tidak ditentukan. Saat Anda menentukan |
Parameter ini juga dapat menentukan nilai berikut seperti yang ditunjukkan.
| Nilai | Arti |
|---|---|
|
Mengalokasikan memori menggunakan dukungan halaman besar .
Ukuran dan perataan harus kelipatan minimum halaman besar. Untuk mendapatkan nilai ini, gunakan fungsi Jika Anda menentukan nilai ini, Anda juga harus menentukan MEM_RESERVE dan MEM_COMMIT. |
|
Mencadangkan rentang alamat yang dapat digunakan untuk memetakan halaman Address Windowing Extensions (AWE).
Nilai ini harus digunakan dengan MEM_RESERVE dan tidak ada nilai lain. |
|
Mengalokasikan memori pada alamat setinggi mungkin. Ini bisa lebih lambat daripada alokasi biasa, terutama ketika ada banyak alokasi. |
|
Menyebabkan sistem melacak halaman yang ditulis di wilayah yang dialokasikan. Jika Anda menentukan nilai ini, Anda juga harus menentukan MEM_RESERVE.
Untuk mengambil alamat halaman yang telah ditulis sejak wilayah dialokasikan atau status pelacakan tulis direset, panggil fungsi GetWriteWatch |
[in] PageProtection
Perlindungan memori untuk wilayah halaman yang akan dialokasikan. Jika halaman sedang diterapkan, Anda dapat menentukan salah satu konstanta perlindungan memori . Konstanta berikut menghasilkan kesalahan:
- PAGE_EXECUTE
- PAGE_EXECUTE_READ
- PAGE_EXECUTE_READWRITE
- PAGE_EXECUTE_WRITECOPY
[in, out, optional] ExtendedParameters
Penunjuk opsional ke satu atau beberapa parameter jenis yang diperluas MEM_EXTENDED_PARAMETER. Masing-masing nilai parameter yang diperluas itu sendiri dapat memiliki bidang Jenis
[in] ParameterCount
Jumlah parameter yang diperluas yang diacu oleh ExtendedParameters.
Mengembalikan nilai
Jika fungsi berhasil, nilai pengembalian adalah alamat dasar dari wilayah halaman yang dialokasikan.
Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Komentar
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 perataan tertentu; misalnya, untuk memungkinkan aplikasi Anda menerapkan wilayah besar/besar yang dipetakan halaman sesuai permintaan.
Anda dapat memanggil Virtual2AllocFromApp dari aplikasi Windows Store dengan kemampuan just-in-time (JIT) untuk menggunakan fungsionalitas JIT. Aplikasi harus menyertakan kemampuan codeGeneration dalam file manifes aplikasi untuk menggunakan kemampuan JIT.
Setiap halaman memiliki status halaman terkait. Fungsi
- Menerapkan wilayah halaman yang dipesan
- Memesan wilayah halaman gratis
- Secara bersamaan memesan dan menerapkan wilayah halaman gratis
Anda dapat menggunakan
Jika parameter BaseAddress
Virtual2AllocFromApp tidak mengizinkan pembuatan halaman yang dapat dieksekusi.
Fungsi
Fungsi VirtualFree dapat menonaktifkan halaman yang diterapkan, merilis penyimpanan halaman, atau secara bersamaan dapat menonaktifkan dan merilis halaman yang diterapkan. Ini juga dapat merilis halaman yang dipesan, menjadikannya halaman gratis.
Saat membuat wilayah yang akan dapat dieksekusi, program panggilan bertanggung jawab untuk memastikan koherensi cache melalui panggilan yang sesuai untuk FlushInstructionCache setelah kode ditetapkan di tempatnya. Jika tidak, upaya untuk mengeksekusi kode keluar dari wilayah yang baru dapat dieksekusi dapat menghasilkan hasil yang tidak dapat diprediksi.
Contoh
Untuk contoh kode, lihat Virtual2Alloc.
Persyaratan
| Syarat | Nilai |
|---|---|
| klien minimum yang didukung | Windows 10 [hanya aplikasi desktop] |
| server minimum yang didukung |
Windows Server 2016 [hanya aplikasi desktop] |
| Platform Target |
Windows |
| Header |
memoryapi.h (termasuk Windows.h) |
| Pustaka |
WindowsApp.lib |
| DLL |
Kernel32.dll |
Lihat juga
VirtualQuery