Частная куча - это куча созданная для распределения в памяти некоторых объектов, что позволяет обходить стандартные механизмы использования кучи. Основная идея использования частных куч на том, что все объекты одного размера будут находиться в свой куче. Это позволяет избегать ее фрагментации. Если есть несколько объектов разного размера, то нужно несколько куч. То есть каждый класс должен управлять своей кучей.
Итак, как же реализуется частная куча. Идея такая. В классе заводиться указатель на частную кучу и перегружается оператор new и delete. Ниже приводиться пример простого класса с реализацией частной кучи.
#include "stdafx.h" #include "windows.h" #include "iostream.h" class CObj1 // Это - наш класс { static HANDLE m_hHeap; // Это - наша куча public: void* operator new(size_t s); // А это - Перегруженные операторы void operator delete(void *p); int x1; // Данные к классе int x2; int x3; }; HANDLE CObj1::m_hHeap=NULL; // начальное состояние void* CObj1::operator new(size_t s) { void *p; if (m_hHeap==NULL) // если куча не создана { SYSTEM_INFO inf; GetSystemInfo(&inf); // получить информация о системе m_hHeap = HeapCreate(0,inf.dwAllocationGranularity,0); // создать кучу } p=HeapAlloc(m_hHeap,0,s); // выделить память return p; // вернуть указатель на созданный объект } void CObj1::operator delete(void *p) { HeapFree(m_hHeap,0,p); // освободить данные из кучи } void main() { CObj1* cobj[10]; // Массив объектов cobj[0]=new CObj1(); // выделяем память cobj[0]->x1=10; cobj[1]=new CObj1(); delete cobj[0]; delete cobj[1]; }