Bagikan melalui


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