Бьерн Страуструп.
Язык программирования С++
368
Pool::Pool(unsigned sz) : esize(sz)
{
head = 0;
}
Функция Pool::grow() будет связывать все элементы в список квантов свободной памяти head, образуя
из них новый блок. Определения остальных функций-членов оставлены в качестве упражнений 5 и 6 в
$$13.11.
void Pool::grow()
{
const int overhead = 12;
const int chunk_size = 8*1024-overhead;
const int nelem = (chunk_size-esize)/esize;
char* start = new char[chunk_size];
char* last = &start[(nelem-1)*esize];
for (char* p = start; p
((Link*)p)->next
=
((Link*)p)+1;
((Link*)last)->next = 0;
head = (Link*)start;
}
Достарыңызбен бөлісу: