Титульная страница   Пространства имен   Алфавитный указатель   Классы   Файлы   Члены пространства имен   Члены классов   Члены файла  

Класс sized_alloc

Класс sized_alloc является быстрым распределителем памяти известного размера. Подробнее...

#include <fix_alloc.hpp>

Полный список членов класса

Открытые статические члены

void * alloc (size_t size)
 Выделяет память указанного размера или возбуждает std::bad_alloc.

void free (void *ptr, size_t size)
 Освобождает ранее выделенную память.


Подробное описание

Класс sized_alloc является быстрым распределителем памяти известного размера.

Его отличие от класса fixed_alloc состоит в том, что размер запрашиваемой памяти задается при каждом вызове функций alloc() и free(), в то время как в fixed_alloc он является параметром шаблона и, следовательно, жестко зафиксирован (что делает fixed_alloc чуть более производительным). Класс sized_alloc следует применять для реализации распределителей памяти базовых классов (с обязательным виртуальным деструктором), которые наследуются классами производными. Дело в том, что размер объекта производного класса, как правило, больше, так что определенный в классе распределитель памяти должен быть объявлен с дополнительным параметром size_t, чье значение должно передаваться в alloc() и free().

См. определение в файле fix_alloc.hpp строка 128


Методы

void * sized_alloc::alloc size_t  size  )  [static]
 

Выделяет память указанного размера или возбуждает std::bad_alloc.

Алгоритм работы полностью аналогичен алгоритму класса fixed_alloc, за тем исключением, что в случае size>MAX_SIZE память будет выделена с помощью operator new(). Константа MAX_SIZE определена в файле-реализации.

См. определение в файле fix_alloc.cpp строка 68

Перекрестные ссылки fixed_alloc_private::get_mem(), heads, HEADS_NUM и SVP.

00069 {
00070  size_t index=(size+SVP-1)/SVP;
00071  if (index>=HEADS_NUM) return operator new(size);
00072 
00073  void*& head=heads[index];
00074  if (!head) fixed_alloc_private::get_mem(head, index*SVP);
00075 
00076  void* ret=head;
00077  head=*(void**)head;
00078 
00079  return ret;
00080 }

void sized_alloc::free void *  ptr,
size_t  size
[static]
 

Освобождает ранее выделенную память.

Алгоритм работы полностью аналогичен алгоритму класса fixed_alloc, за тем исключением, что в случае size>MAX_SIZE память действительно освобождается (посредством вызова operator delete(ptr)). Константа MAX_SIZE определена в файле-реализации.

См. определение в файле fix_alloc.cpp строка 82

Перекрестные ссылки heads, HEADS_NUM и SVP.

00083 {
00084  size_t index=(size+SVP-1)/SVP;
00085  if (index>=HEADS_NUM) operator delete(ptr);
00086  else {
00087       void*& head=heads[index];
00088 
00089       *(void**)ptr=head;
00090       head=ptr;
00091  }
00092 }


Объявления и описания членов классов находятся в файлах:
Документация по xcppcomm. Последние изменения: Sat Mar 20 18:21:53 2004. Создано системой doxygen1.3