Классы | |
class | void_alloc |
Вспомогательный класс для реализации fixed_alloc. Подробнее... | |
Функции | |
void | get_mem (void *&head, size_t type_sz) |
Запрашивает у системы память размером (около) CHUNK_SIZE и создает в ней связный список свободных кусков размера type_sz. |
|
Запрашивает у системы память размером (около) CHUNK_SIZE и создает в ней связный список свободных кусков размера type_sz. Голова списка возвращается в параметре head. Для работоспособности функции должно выполняться следующее условие: type_sz>=sizeof(void*). В случае нехватки памяти возбуждает std::bad_alloc. Константа CHUNK_SIZE определена в файле-реализации. См. определение в файле fix_alloc.cpp строка 53 Перекрестные ссылки CHUNK_SIZE. Используется в fixed_alloc_private::void_alloc< SIZE >::alloc() и sized_alloc::alloc().
00054 { 00055 size_t n=(CHUNK_SIZE>type_sz) ? CHUNK_SIZE/type_sz : 1; 00056 head=operator new(n*type_sz); 00057 00058 char* last=(char*)head+(n-1)*type_sz; 00059 for (char* ptr=(char*)head; ; ptr+=type_sz) { 00060 if (ptr!=last) *(void**)ptr=ptr+type_sz; 00061 else { 00062 *(void**)ptr=0; 00063 break; 00064 } 00065 } 00066 } |