CWin32Heap, classe
Cette classe implémente IAtlMemMgr à l’aide des fonctions d’allocation de tas Win32.
Important
Cette classe et ses membres ne peuvent pas être utilisés dans les applications qui s’exécutent dans Windows Runtime.
Syntaxe
class CWin32Heap : public IAtlMemMgr
Membres
Constructeurs publics
Nom | Description |
---|---|
CWin32Heap ::CWin32Heap | Constructeur . |
CWin32Heap ::~CWin32Heap | Destructeur. |
Méthodes publiques
Nom | Description |
---|---|
CWin32Heap ::Allocate | Alloue un bloc de mémoire à partir de l'objet de tas. |
CWin32Heap ::Attach | Attache l’objet tas à un tas existant. |
CWin32Heap ::D etach | Détache l’objet tas d’un tas existant. |
CWin32Heap ::Free | Libère la mémoire précédemment allouée à partir du tas. |
CWin32Heap ::GetSize | Retourne la taille d’un bloc de mémoire alloué à partir de l’objet tas. |
CWin32Heap ::Reallocate | Réalloue un bloc de mémoire à partir de l'objet de tas. |
Membres de données publics
Nom | Description |
---|---|
CWin32Heap ::m_bOwnHeap | Indicateur utilisé pour déterminer la propriété actuelle du handle de tas. |
CWin32Heap ::m_hHeap | Handle vers l’objet tas. |
Notes
CWin32Heap
implémente des méthodes d’allocation de mémoire à l’aide des fonctions d’allocation de tas Win32, notamment HeapAlloc et HeapFree. Contrairement à d’autres classes de tas, CWin32Heap
un handle de tas valide doit être fourni avant l’allocation de la mémoire : les autres classes par défaut utilisent le tas de processus. Le handle peut être fourni au constructeur ou à la méthode CWin32Heap ::Attach . Pour plus d’informations, consultez la méthode CWin32Heap ::CWin32Heap .
Exemple
Consultez l’exemple pour IAtlMemMgr.
Hiérarchie d'héritage
IAtlMemMgr
CWin32Heap
Spécifications
En-tête : atlmem.h
CWin32Heap ::Allocate
Alloue un bloc de mémoire à partir de l'objet de tas.
virtual __declspec(allocator) void* Allocate(size_t nBytes) throw();
Paramètres
octets
Nombre demandé d'octets dans le nouveau bloc de mémoire.
Valeur de retour
Retourne un pointeur vers le bloc de mémoire nouvellement alloué.
Notes
Appelez CWin32Heap ::Free ou CWin32Heap ::Reallocate pour libérer la mémoire allouée par cette méthode.
Implémenté à l’aide de HeapAlloc.
CWin32Heap ::Attach
Attache l’objet tas à un tas existant.
void Attach(HANDLE hHeap, bool bTakeOwnership) throw();
Paramètres
hHeap
Handle de tas existant.
bTakeOwnership
Indicateur indiquant si l’objet CWin32Heap
doit prendre possession des ressources du tas.
Notes
Si bTakeOwnership a la valeur TRUE, l’objet CWin32Heap
est responsable de la suppression du handle de tas.
CWin32Heap ::CWin32Heap
Constructeur .
CWin32Heap() throw();
CWin32Heap( HANDLE hHeap) throw();
CWin32Heap(
DWORD dwFlags,
size_t nInitialSize,
size_t nMaxSize = 0);
Paramètres
hHeap
Objet de tas existant.
dwFlags
Indicateurs utilisés pour créer le tas.
nInitialSize
Taille initiale du tas.
nMaxSize
Taille maximale du tas.
Notes
Avant d'allouer de la mémoire, il est nécessaire de fournir à l'objet CWin32Heap
un handle de tas valide. La façon la plus simple d'y parvenir consiste à utiliser le tas du processus :
CWin32Heap MyHeap(GetProcessHeap());
Il est également possible de fournir un handle de tas existant au constructeur, auquel cas le nouvel objet ne prend pas possession du tas. Le handle de tas d'origine est toujours valide lorsque l'objet CWin32Heap
est supprimé.
Un tas existant peut également être attaché au nouvel objet, à l’aide de CWin32Heap ::Attach.
Si un tas est requis lorsque des opérations sont toutes exécutées à partir d'un seul thread, il est préférable de créer l'objet comme suit :
CWin32Heap MyHeap(HEAP_NO_SERIALIZE, SomeInitialSize);
Le paramètre HEAP_NO_SERIALIZE spécifie que l’exclusion mutuelle ne sera pas utilisée lorsque les fonctions de tas allouent et libèrent de la mémoire, avec une augmentation en fonction des performances.
Le troisième paramètre est 0 par défaut, ce qui permet au tas de s'accroître en fonction des besoins. Consultez HeapCreate pour obtenir une explication des tailles et indicateurs de mémoire.
CWin32Heap ::~CWin32Heap
Destructeur.
~CWin32Heap() throw();
Notes
Détruit le handle de tas si l’objet CWin32Heap
possède la propriété du tas.
CWin32Heap ::D etach
Détache l’objet tas d’un tas existant.
HANDLE Detach() throw();
Valeur de retour
Retourne le handle au tas auquel l’objet a été précédemment attaché.
CWin32Heap ::Free
Libère la mémoire précédemment allouée à partir du tas par CWin32Heap ::Allocate ou CWin32Heap ::Reallocate.
virtual void Free(void* p) throw();
Paramètres
p
Pointeur vers le bloc de mémoire à libérer. NULL est une valeur valide et ne fait rien.
CWin32Heap ::GetSize
Retourne la taille d’un bloc de mémoire alloué à partir de l’objet tas.
virtual size_t GetSize(void* p) throw();
Paramètres
p
Pointeur vers le bloc de mémoire dont la taille est obtenue par la méthode. Il s’agit d’un pointeur retourné par CWin32Heap ::Allocate ou CWin32Heap ::Reallocate.
Valeur de retour
Retourne la taille, en octets, du bloc de mémoire alloué.
CWin32Heap ::m_bOwnHeap
Indicateur utilisé pour déterminer la propriété actuelle du handle de tas stocké dans m_hHeap.
bool m_bOwnHeap;
CWin32Heap ::m_hHeap
Handle vers l’objet tas.
HANDLE m_hHeap;
Notes
Variable utilisée pour stocker un handle dans l’objet tas.
CWin32Heap ::Reallocate
Réalloue un bloc de mémoire à partir de l'objet de tas.
virtual __declspec(allocator) void* Reallocate(void* p, size_t nBytes) throw();
Paramètres
p
Pointeur vers le bloc de mémoire à réallouer.
octets
Nouvelle taille en octets du bloc alloué. Le bloc peut être agrandi ou réduit.
Valeur de retour
Retourne un pointeur vers le bloc de mémoire nouvellement alloué.
Notes
Si p est NULL, il est supposé que le bloc de mémoire n’a pas encore été alloué et que CWin32Heap ::Allocate est appelé, avec un argument de nBytes.
Voir aussi
Vue d’ensemble de la classe
IAtlMemMgr, classe
CLocalHeap, classe
CGlobalHeap, classe
CCRTHeap, classe
CComHeap, classe