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
Elementy członkowskie
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