Udostępnij za pośrednictwem


Klasa CWin32Heap

Ta klasa implementuje program IAtlMemMgr przy użyciu funkcji alokacji sterty Win32.

Ważne

Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.

Składnia

class CWin32Heap : public IAtlMemMgr

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
CWin32Heap::CWin32Heap Konstruktor.
CWin32Heap::~CWin32Heap Destruktora.

Metody publiczne

Nazwa/nazwisko opis
CWin32Heap::Przydziel Przydziela blok pamięci z obiektu sterta.
CWin32Heap::Attach Dołącza obiekt sterta do istniejącej sterty.
CWin32Heap::D etach Odłącza obiekt sterta od istniejącej sterty.
CWin32Heap::Free Zwalnia pamięć wcześniej przydzieloną z sterta.
CWin32Heap::GetSize Zwraca rozmiar bloku pamięci przydzielonego z obiektu sterty.
CWin32Heap::Reallocate Przydzieli blok pamięci z obiektu sterta.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CWin32Heap::m_bOwnHeap Flaga używana do określania bieżącej własności uchwytu stert.
CWin32Heap::m_hHeap Dojście do obiektu sterta.

Uwagi

CWin32Heap implementuje metody alokacji pamięci przy użyciu funkcji alokacji sterty Win32, w tym HeapAlloc i HeapFree. W przeciwieństwie do innych klas stert, CWin32Heap wymaga prawidłowego uchwytu stertowego, który ma zostać udostępniony przed przydzielenie pamięci: inne klasy domyślnie używają sterta procesu. Uchwyt można dostarczyć do konstruktora lub do metody CWin32Heap::Attach . Aby uzyskać więcej informacji, zobacz metodę CWin32Heap::CWin32Heap .

Przykład

Zobacz przykład dla programu IAtlMemMgr.

Hierarchia dziedziczenia

IAtlMemMgr

CWin32Heap

Wymagania

Nagłówek: atlmem.h

CWin32Heap::Przydziel

Przydziela blok pamięci z obiektu sterta.

virtual __declspec(allocator) void* Allocate(size_t nBytes) throw();

Parametry

nBajty
Żądana liczba bajtów w nowym bloku pamięci.

Wartość zwracana

Zwraca wskaźnik do nowo przydzielonego bloku pamięci.

Uwagi

Wywołaj metodę CWin32Heap::Free lub CWin32Heap::Reallocate , aby zwolnić pamięć przydzieloną przez tę metodę.

Zaimplementowano przy użyciu metody HeapAlloc.

CWin32Heap::Attach

Dołącza obiekt sterta do istniejącej sterty.

void Attach(HANDLE hHeap, bool bTakeOwnership) throw();

Parametry

hHeap
Istniejący uchwyt stertowy.

bTakeOwnership
Flaga wskazująca, czy CWin32Heap obiekt ma przejąć własność zasobów sterta.

Uwagi

Jeśli parametr bTakeOwnership ma wartość TRUE, CWin32Heap obiekt jest odpowiedzialny za usunięcie uchwytu stert.

CWin32Heap::CWin32Heap

Konstruktor.

CWin32Heap() throw();
CWin32Heap( HANDLE  hHeap) throw();
CWin32Heap(
    DWORD  dwFlags,
    size_t nInitialSize,
    size_t nMaxSize = 0);

Parametry

hHeap
Istniejący obiekt sterty.

Dwflags
Flagi używane do tworzenia sterty.

nInitialSize
Początkowy rozmiar sterty.

nMaxSize
Maksymalny rozmiar sterty.

Uwagi

Przed alokowaniem pamięci należy podać CWin32Heap obiekt z prawidłowym uchwytem stert. Najprościej to osiągnąć przy użyciu sterty procesu:

CWin32Heap MyHeap(GetProcessHeap());   

Użytkownik może również dostarczyć istniejący uchwyt sterty do konstruktora, w którym to przypadku nowy obiekt nie przejmuje sterty na własność. Oryginalny uchwyt sterta będzie nadal prawidłowy po usunięciu CWin32Heap obiektu.

Istniejący stertę można również dołączyć do nowego obiektu przy użyciu CWin32Heap ::Attach.

Jeśli sterta jest wymagana tam, gdzie wszystkie operacje są wykonywane z jednego wątku, najlepszym sposobem jest utworzenie obiektu w następujący sposób:

CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);   

Parametr HEAP_NO_SERIALIZE określa, że wzajemne wykluczanie nie będzie używane, gdy funkcje stert przydzielą i zwolnią pamięć, z zgodnie ze wzrostem wydajności.

Domyślne ustawienie trzeciego parametru to 0, dzięki czemu sterta może się rozrastać zgodnie z potrzebami. Zobacz HeapCreate (Tworzenie sterty ), aby uzyskać wyjaśnienie rozmiarów pamięci i flag.

CWin32Heap::~CWin32Heap

Destruktora.

~CWin32Heap() throw();

Uwagi

Niszczy uchwyt sterta, jeśli CWin32Heap obiekt ma własność sterta.

CWin32Heap::D etach

Odłącza obiekt sterta od istniejącej sterty.

HANDLE Detach() throw();

Wartość zwracana

Zwraca uchwyt do sterta, do którego obiekt został wcześniej dołączony.

CWin32Heap::Free

Zwalnia pamięć wcześniej przydzieloną z sterta przez CWin32Heap::Allocate lub CWin32Heap::Reallocate.

virtual void Free(void* p) throw();

Parametry

p
Wskaźnik do bloku pamięci, aby zwolnić. Wartość NULL jest prawidłową wartością i nic nie robi.

CWin32Heap::GetSize

Zwraca rozmiar bloku pamięci przydzielonego z obiektu sterty.

virtual size_t GetSize(void* p) throw();

Parametry

p
Wskaźnik do bloku pamięci, którego rozmiar zostanie uzyskana metoda. Jest to wskaźnik zwracany przez CWin32Heap::Allocate lub CWin32Heap::Reallocate.

Wartość zwracana

Zwraca rozmiar w bajtach przydzielonego bloku pamięci.

CWin32Heap::m_bOwnHeap

Flaga używana do określania bieżącej własności uchwytu stertowego przechowywanego w m_hHeap.

bool m_bOwnHeap;

CWin32Heap::m_hHeap

Dojście do obiektu sterta.

HANDLE m_hHeap;

Uwagi

Zmienna używana do przechowywania uchwytu do obiektu sterta.

CWin32Heap::Reallocate

Przydzieli blok pamięci z obiektu sterta.

virtual __declspec(allocator) void* Reallocate(void* p, size_t nBytes) throw();

Parametry

p
Wskaźnik do bloku pamięci, aby ponownie przydzielić.

nBajty
Nowy rozmiar w bajtach przydzielonego bloku. Blok może być większy lub mniejszy.

Wartość zwracana

Zwraca wskaźnik do nowo przydzielonego bloku pamięci.

Uwagi

Jeśli parametr p ma wartość NULL, zakłada się, że blok pamięci nie został jeszcze przydzielony, a wywołana jest wartość CWin32Heap::Allocate z argumentem nBytes.

Zobacz też

Omówienie klasy
Klasa IAtlMemMgr
Klasa CLocalHeap
Klasa CGlobalHeap
Klasa CCRTHeap
Klasa CComHeap