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

Шаблон класса fixed_alloc< T >

Класс fixed_alloc<T> является быстрым распределителем памяти фиксированного размера для элементов типа T. Подробнее...

#include <fix_alloc.hpp>

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

Открытые типы

enum  { SIZE = (sizeof(T)+sizeof(void*)-1)/sizeof(void*)*sizeof(void*) }
 Размер выделяемой под T памяти. Подробнее...


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

T * alloc ()
 Выделяет память (размера SIZE) для объекта T.

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


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

template<class T>
class fixed_alloc< T >

Класс fixed_alloc<T> является быстрым распределителем памяти фиксированного размера для элементов типа T.

Он выделяет память кусками (около) CHUNK_SIZE и нарезает их на части размера SIZE. Полученная аллокатором у системы память ей не возвращается, а используется повторно при выделениях/освобождениях элементов T. Константа CHUNK_SIZE определена в файле-реализации.

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


Перечисления

template<class T>
anonymous enum
 

Размер выделяемой под T памяти.

Округляем sizeof(T) до sizeof(void*) воизбежание проблем с выравниванием.

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

00083 { SIZE=(sizeof(T)+sizeof(void*)-1)/sizeof(void*)*sizeof(void*) };


Методы

template<class T>
T* fixed_alloc< T >::alloc  )  [inline, static]
 

Выделяет память (размера SIZE) для объекта T.

При нехватке памяти будет возбуждено std::bad_alloc.

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

Перекрестные ссылки fixed_alloc_private::void_alloc< SIZE >::alloc().

Используется в sh_array< T >::Rep::operator new() и sh_ptr< T >::Rep::operator new().

00090       {
00091        return (T*)fixed_alloc_private::void_alloc<SIZE>::alloc();
00092       }

template<class T>
void fixed_alloc< T >::free void *  ptr  )  [inline, static]
 

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

При этом, она не возвращается системе, а остается в списке свободных кусков.

Вызов free(0) обрабатывается некорректно (происходит попытка разыменования 0). На самом деле это не является большой проблемой т.к. если с помощью free() реализовать X::operator delete(), то вызов delete (X*)0 не приведет к вызову free(0) -- это гарантируется языком. Проблемы будут только при непосредственном вызове вида X::operator delete(0), что в реальном коде практически не встречается, так что проверка на 0 была опущена для улучшения производительности (в крайнем случае, проверку на 0 можно произвести самостоятельно непосредственно перед вызовом X::operator delete(ptr) или прямо в теле X::operator delete()).

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

Перекрестные ссылки fixed_alloc_private::void_alloc< SIZE >::free().

Используется в sh_array< T >::Rep::operator delete() и sh_ptr< T >::Rep::operator delete().

00110       {
00111        fixed_alloc_private::void_alloc<SIZE>::free(ptr);
00112       }


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