Классы | |
| 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 }
|
1.3