|
Алгоритм уплотнения Алгоритм уплотнения выглядит так просто, что его можно было бы и не приводить. 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; } |
Copyright 2005. Климов Александр. All Right Reserved.