Bagikan melalui


Fungsi HeapSize (heapapi.h)

Mengambil ukuran blok memori yang dialokasikan dari heap oleh fungsi HeapAlloc atau HeapReAlloc .

Sintaks

SIZE_T HeapSize(
  [in] HANDLE  hHeap,
  [in] DWORD   dwFlags,
  [in] LPCVOID lpMem
);

Parameter

[in] hHeap

Handel ke timbunan tempat blok memori berada. Handel ini dikembalikan oleh fungsi HeapCreate atau GetProcessHeap .

[in] dwFlags

Opsi ukuran timbunan. Menentukan nilai berikut mengambil alih nilai terkait yang ditentukan dalam parameter flOptions saat heap dibuat dengan menggunakan fungsi HeapCreate .

Nilai Makna
HEAP_NO_SERIALIZE
0x00000001
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 menentukan HEAP_NO_SERIALIZE tambahan dalam panggilan fungsi ini.

Nilai ini tidak boleh ditentukan saat mengakses tumpukan proses. Sistem dapat membuat utas tambahan dalam proses aplikasi, seperti handler CTRL+C, yang secara bersamaan mengakses tumpukan proses.

[in] lpMem

Penunjuk ke blok memori yang ukurannya akan diperoleh fungsi. Ini adalah pointer yang dikembalikan oleh fungsi HeapAlloc atau HeapReAlloc . Blok memori harus berasal dari tumpukan yang ditentukan oleh parameter hHeap .

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan adalah ukuran yang diminta dari blok memori yang dialokasikan, dalam byte.

Jika fungsi gagal, nilai yang dikembalikan adalah (SIZE_T)-1. Fungsi ini tidak memanggil SetLastError. Aplikasi tidak dapat memanggil GetLastError untuk informasi kesalahan yang diperluas.

Jika parameter lpMem mengacu pada alokasi heap yang tidak ada dalam heap yang ditentukan oleh parameter hHeap , perilaku fungsi HeapSize tidak terdefinisi.

Keterangan

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 tumpukan yang sama. Mengatur nilai HEAP_NO_SERIALIZE menghilangkan pengecualian 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 tumpukan untuk tumpukan tertentu.
  • Proses ini memiliki beberapa utas, dan aplikasi menyediakan mekanismenya sendiri untuk pengecualian bersama ke tumpukan tertentu.

Persyaratan

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

Lihat juga

Fungsi Heap

HeapAlloc

HeapReAlloc

Fungsi Manajemen Memori

API Vertdll tersedia di enklave VBS