Fungsi HeapWalk (heapapi.h)

Menghitung blok memori dalam tumpukan yang ditentukan.

Sintaks

BOOL HeapWalk(
  [in]      HANDLE               hHeap,
  [in, out] LPPROCESS_HEAP_ENTRY lpEntry
);

Parameter

[in] hHeap

Pegangan ke timbunan. Handel ini dikembalikan oleh fungsi HeapCreate atau GetProcessHeap .

[in, out] lpEntry

Penunjuk ke struktur PROCESS_HEAP_ENTRY yang mempertahankan informasi status untuk enumerasi timbunan tertentu.

Jika fungsi HeapWalk berhasil, mengembalikan nilai TRUE, anggota struktur ini berisi informasi tentang blok memori berikutnya dalam heap.

Untuk memulai enumerasi timbunan, atur bidang lpData dari struktur PROCESS_HEAP_ENTRY ke NULL. Untuk melanjutkan enumerasi timbunan tertentu, panggil fungsi HeapWalk berulang kali, tanpa perubahan pada hHeap, lpEntry, atau salah satu anggota struktur PROCESS_HEAP_ENTRY .

Menampilkan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.

Jika enumerasi heap berhasil dihentikan dengan mencapai akhir heap, fungsi mengembalikan FALSE, dan GetLastError mengembalikan kode kesalahan ERROR_NO_MORE_ITEMS.

Keterangan

Fungsi HeapWalk terutama berguna untuk penelusuran kesalahan karena menghitung timbunan adalah operasi yang berpotensi memakan waktu. Mengunci tumpukan selama enumerasi memblokir utas lain agar tidak mengakses tumpukan dan dapat menurunkan performa, terutama pada komputer multiproses simetris (SMP). Efek samping dapat bertahan sampai timbunan tidak terkunci. Gunakan fungsi HeapLock dan HeapUnlock untuk mengontrol penguncian timbunan selama enumerasi heap.

Untuk memulai enumerasi timbunan, panggil HeapWalk dengan bidang lpData dari struktur PROCESS_HEAP_ENTRY yang diarahkan oleh lpEntry diatur ke NULL.

Untuk melanjutkan enumerasi timbunan, panggil HeapWalk dengan nilai hHeap dan lpEntry yang sama, dan dengan struktur PROCESS_HEAP_ENTRY tidak berubah dari panggilan sebelumnya ke HeapWalk. Ulangi proses ini sampai Anda tidak perlu enumerasi lebih lanjut, atau sampai fungsi mengembalikan FALSE dan GetLastError mengembalikan ERROR_NO_MORE_ITEMS, menunjukkan bahwa semua blok memori tumpukan telah dijumlahkan.

Tidak ada panggilan khusus HeapWalk yang diperlukan untuk mengakhiri enumerasi tumpukan, karena tidak ada data status enumerasi yang dipertahankan di luar konten struktur PROCESS_HEAP_ENTRY .

HeapWalk dapat gagal dalam aplikasi multithreaded jika tumpukan tidak dikunci selama enumerasi tumpukan.

Contoh

Menghitung Heap

Persyaratan

   
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header heapapi.h (termasuk Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

Fungsi Timbunan

HeapLock

HeapReAlloc

HeapUnlock

HeapValidate

Fungsi Manajemen Memori

PROCESS_HEAP_ENTRY