Материалы книги получены с http://www.itlibitum.ru/
Алгоритм уплотнения
Алгоритм уплотнения выглядит так просто, что его можно было бы и не приводить.
class Space {
private:
unsigned long next_byte;
unsigned char bytes[SPACESIZE];
public:
Space() : next_byte(0) {}
void* Allocate(size_t size);
void Compact();
};
void* Space::Allocate(size_t size)
{
// Выровнять на границу слова
size = ROUNDUP(size);
if (next_byte + size > SPACESIZE)
{
Compact();
if (next_byte + size > SPACESIZE)
// Исключение - нехватка памяти
}
void* space = &bytes[next_byte];
next_byte += size;
return space;
}
void Space::Compact()
{
next_byte = 0;
VoidPtrIterator* iterator = VoidPtrPool::iterator();
while (iterator->More())
{
VoidPtr* vp = iterator->Next();
void* space = Allocate(vp->size);
if (space < vp->address) // Проверить, что объект поместится
}
delete iterator;
}
Назад Содержание Далее
|