Kelas CWin32Heap
Kelas ini mengimplementasikan IAtlMemMgr menggunakan fungsi alokasi timbunan Win32.
Penting
Kelas ini dan anggotanya tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime.
Sintaks
class CWin32Heap : public IAtlMemMgr
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CWin32Heap::CWin32Heap | Konstruktor. |
CWin32Heap::~CWin32Heap | Destruktor. |
Metode Publik
Nama | Deskripsi |
---|---|
CWin32Heap::Alokasikan | Mengalokasikan blok memori dari objek heap. |
CWin32Heap::Lampirkan | Melampirkan objek timbunan ke timbunan yang ada. |
CWin32Heap::D etach | Melepaskan objek tumpukan dari timbunan yang ada. |
CWin32Heap::Free | Membebaskan memori yang sebelumnya dialokasikan dari tumpukan. |
CWin32Heap::GetSize | Mengembalikan ukuran blok memori yang dialokasikan dari objek heap. |
CWin32Heap::Reallocate | Merealokasi blok memori dari objek heap. |
Anggota Data Publik
Nama | Deskripsi |
---|---|
CWin32Heap::m_bOwnHeap | Bendera yang digunakan untuk menentukan kepemilikan handel timbunan saat ini. |
CWin32Heap::m_hHeap | Tangani ke objek timbunan. |
Keterangan
CWin32Heap
menerapkan metode alokasi memori menggunakan fungsi alokasi timbunan Win32, termasuk HeapAlloc dan HeapFree. Tidak seperti kelas Heap lainnya, CWin32Heap
memerlukan handel timbunan yang valid untuk disediakan sebelum memori dialokasikan: kelas lain default untuk menggunakan timbunan proses. Handel dapat diberikan ke konstruktor atau ke metode CWin32Heap::Attach . Lihat metode CWin32Heap::CWin32Heap untuk detail selengkapnya.
Contoh
Lihat contoh untuk IAtlMemMgr.
Hierarki Warisan
IAtlMemMgr
CWin32Heap
Persyaratan
Header: atlmem.h
CWin32Heap::Alokasikan
Mengalokasikan blok memori dari objek heap.
virtual __declspec(allocator) void* Allocate(size_t nBytes) throw();
Parameter
nByte
Jumlah byte yang diminta di blok memori baru.
Tampilkan Nilai
Mengembalikan penunjuk ke blok memori yang baru dialokasikan.
Keterangan
Panggil CWin32Heap::Free atau CWin32Heap::Reallocate untuk membebaskan memori yang dialokasikan oleh metode ini.
Diimplementasikan menggunakan HeapAlloc.
CWin32Heap::Lampirkan
Melampirkan objek timbunan ke timbunan yang ada.
void Attach(HANDLE hHeap, bool bTakeOwnership) throw();
Parameter
hHeap
Handel timbunan yang ada.
bTakeOwnership
Bendera yang menunjukkan apakah CWin32Heap
objek akan mengambil kepemilikan atas sumber daya timbunan.
Keterangan
Jika bTakeOwnership TRUE, CWin32Heap
objek bertanggung jawab untuk menghapus handel tumpukan.
CWin32Heap::CWin32Heap
Konstruktor.
CWin32Heap() throw();
CWin32Heap( HANDLE hHeap) throw();
CWin32Heap(
DWORD dwFlags,
size_t nInitialSize,
size_t nMaxSize = 0);
Parameter
hHeap
Objek timbunan yang ada.
dwFlags
Bendera yang digunakan dalam membuat timbunan.
nInitialSize
Ukuran awal timbunan.
nMaxSize
Ukuran maksimum timbunan.
Keterangan
Sebelum mengalokasikan memori, perlu untuk menyediakan CWin32Heap
objek dengan handel timbunan yang valid. Cara paling sederhana untuk mencapainya adalah dengan menggunakan timbunan proses:
CWin32Heap MyHeap(GetProcessHeap());
Dimungkinkan juga untuk menyediakan handel timbunan yang ada ke konstruktor, dalam hal ini objek baru tidak mengambil alih kepemilikan timbunan. Handel tumpukan asli masih akan valid ketika CWin32Heap
objek dihapus.
Timbunan yang ada juga dapat dilampirkan ke objek baru, menggunakan CWin32Heap::Attach.
Jika timbunan diperlukan di mana semua operasi dilakukan dari satu utas, cara terbaik adalah membuat objek sebagai berikut:
CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);
Parameter HEAP_NO_SERIALIZE menentukan bahwa pengecualian bersama tidak akan digunakan ketika fungsi tumpukan mengalokasikan dan membebaskan memori, dengan peningkatan performa yang sesuai.
Parameter ketiga default ke 0, yang memungkinkan timbunan tumbuh sesuai kebutuhan. Lihat HeapCreate untuk penjelasan tentang ukuran memori dan bendera.
CWin32Heap::~CWin32Heap
Destruktor.
~CWin32Heap() throw();
Keterangan
Menghancurkan handel timbunan CWin32Heap
jika objek memiliki kepemilikan timbunan.
CWin32Heap::D etach
Melepaskan objek tumpukan dari timbunan yang ada.
HANDLE Detach() throw();
Tampilkan Nilai
Mengembalikan handel ke timbunan tempat objek sebelumnya dilampirkan.
CWin32Heap::Free
Membebaskan memori yang sebelumnya dialokasikan dari heap oleh CWin32Heap::Allocate atau CWin32Heap::Reallocate.
virtual void Free(void* p) throw();
Parameter
p
Arahkan ke blok memori untuk membebaskan. NULL adalah nilai yang valid dan tidak melakukan apa pun.
CWin32Heap::GetSize
Mengembalikan ukuran blok memori yang dialokasikan dari objek heap.
virtual size_t GetSize(void* p) throw();
Parameter
p
Pointer ke blok memori yang ukurannya akan diperoleh metode. Ini adalah pointer yang dikembalikan oleh CWin32Heap::Allocate atau CWin32Heap::Reallocate.
Tampilkan Nilai
Mengembalikan ukuran, dalam byte, dari blok memori yang dialokasikan.
CWin32Heap::m_bOwnHeap
Bendera yang digunakan untuk menentukan kepemilikan handel timbunan saat ini yang disimpan di m_hHeap.
bool m_bOwnHeap;
CWin32Heap::m_hHeap
Tangani ke objek timbunan.
HANDLE m_hHeap;
Keterangan
Variabel yang digunakan untuk menyimpan handel ke objek heap.
CWin32Heap::Reallocate
Merealokasi blok memori dari objek heap.
virtual __declspec(allocator) void* Reallocate(void* p, size_t nBytes) throw();
Parameter
p
Arahkan ke blok memori untuk merealokasi.
nByte
Ukuran baru dalam byte dari blok yang dialokasikan. Blok dapat dibuat lebih besar atau lebih kecil.
Tampilkan Nilai
Mengembalikan penunjuk ke blok memori yang baru dialokasikan.
Keterangan
Jika p adalah NULL, diasumsikan bahwa blok memori belum dialokasikan dan CWin32Heap::Alokasikan dipanggil, dengan argumen nBytes.
Lihat juga
Gambaran Umum Kelas
Kelas IAtlMemMgr
Kelas CLocalHeap
Kelas CGlobalHeap
Kelas CCRTHeap
Kelas CComHeap