Fungsi HeapCompact (heapapi.h)
Mengembalikan ukuran blok bebas berkomitmen terbesar dalam tumpukan yang ditentukan. Jika Disable heap coalesce pada bendera global gratis diatur, fungsi ini juga menyaring blok memori bebas yang berdekatan dalam tumpukan.
Sintaksis
SIZE_T HeapCompact(
[in] HANDLE hHeap,
[in] DWORD dwFlags
);
Parameter
[in] hHeap
Pegangan ke timbunan. Handel ini dikembalikan oleh fungsi
[in] dwFlags
Opsi akses timbunan. Parameter ini bisa menjadi nilai berikut.
Nilai | Arti |
---|---|
|
Akses berseri tidak akan digunakan.
Untuk informasi selengkapnya, lihat Keterangan. Untuk memastikan bahwa akses berseri dinonaktifkan untuk semua panggilan ke fungsi ini, tentukan HEAP_NO_SERIALIZE dalam panggilan ke HeapCreate. Dalam hal ini, tidak perlu juga menentukan HEAP_NO_SERIALIZE dalam panggilan fungsi ini. Jangan tentukan nilai ini saat mengakses timbunan proses. Sistem dapat membuat utas tambahan dalam proses aplikasi, seperti handler CTRL+C, yang secara bersamaan mengakses timbunan proses. |
Mengembalikan nilai
Jika fungsi berhasil, nilai pengembalian adalah ukuran blok bebas berkomitmen terbesar dalam tumpukan, dalam byte.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.
Dalam kasus yang tidak mungkin bahwa sama sekali tidak ada ruang yang tersedia dalam timbunan, nilai pengembalian fungsi adalah nol, dan GetLastError mengembalikan nilai NO_ERROR.
Komentar
Fungsi
Tidak ada jaminan bahwa aplikasi dapat berhasil mengalokasikan blok memori dari ukuran yang dikembalikan oleh HeapCompact. Utas lain atau ambang penerapan dapat mencegah alokasi tersebut.
Serialisasi memastikan pengecualian bersama ketika dua utas atau lebih mencoba mengalokasikan atau membebaskan blok secara bersamaan dari tumpukan yang sama. Ada biaya performa kecil untuk serialisasi, tetapi harus digunakan setiap kali beberapa utas mengalokasikan dan membebaskan memori dari timbunan yang sama. Mengatur nilai HEAP_NO_SERIALIZE menghilangkan pengecualian timbunan bersama pada tumpukan. Tanpa serialisasi, dua utas atau lebih yang menggunakan handel tumpukan yang sama mungkin mencoba mengalokasikan atau membebaskan memori secara bersamaan, kemungkinan menyebabkan kerusakan dalam tumpukan. Oleh karena itu, nilai HEAP_NO_SERIALIZE dapat digunakan dengan aman hanya dalam situasi berikut:
- Proses ini hanya memiliki satu utas.
- Proses ini memiliki beberapa utas, tetapi hanya satu utas yang memanggil fungsi timbunan untuk tumpukan tertentu.
- Proses ini memiliki beberapa utas, dan aplikasi menyediakan mekanismenya sendiri untuk pengecualian bersama ke tumpukan tertentu.
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
server minimum yang didukung |
Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Platform Target |
Windows |
Header |
heapapi.h (termasuk Windows.h) |
Pustaka |
Kernel32.lib |
DLL |
Kernel32.dll |
Lihat juga
Fungsi Timbunan
HeapValidate