#include <fix_alloc.hpp>
| Открытые статические члены | |
| void * | alloc (size_t size) | 
| Выделяет память указанного размера или возбуждает std::bad_alloc. | |
| void | free (void *ptr, size_t size) | 
| Освобождает ранее выделенную память. | |
Его отличие от класса fixed_alloc состоит в том, что размер запрашиваемой памяти задается при каждом вызове функций alloc() и free(), в то время как в fixed_alloc он является параметром шаблона и, следовательно, жестко зафиксирован (что делает fixed_alloc чуть более производительным). Класс sized_alloc следует применять для реализации распределителей памяти базовых классов (с обязательным виртуальным деструктором), которые наследуются классами производными. Дело в том, что размер объекта производного класса, как правило, больше, так что определенный в классе распределитель памяти должен быть объявлен с дополнительным параметром size_t, чье значение должно передаваться в alloc() и free().
См. определение в файле fix_alloc.hpp строка 128
| 
 | 
| Выделяет память указанного размера или возбуждает 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. Используется в CException::operator new(). 
 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 }
 | 
| 
 | ||||||||||||
| Освобождает ранее выделенную память. Алгоритм работы полностью аналогичен алгоритму класса fixed_alloc, за тем исключением, что в случае size>MAX_SIZE память действительно освобождается (посредством вызова operator delete(ptr)). Константа MAX_SIZE определена в файле-реализации. См. определение в файле fix_alloc.cpp строка 82 Перекрестные ссылки heads, HEADS_NUM и SVP. Используется в CException::operator delete(). 
 | 
 1.3
1.3