Hello, Vladimir! You wrote to Alexander Derazhne on Thu, 24 Mar 2005 02:54:53 +0300:
AD>> Столкнулся с проблемой - фрагментация :-(.
VV> Hеуж-то нельзя аллокировать статически или в виде какой-то связной VV> структуры типа списка или FAT?
Увы, нельзя. Там DMA и DSP пасутся, они этого не поймут :-).
AD>> При наличии 100к свободных блок в 3.5к выделить не получается. AD>> Текущая реализация менеджера хватает первый свободный блок, AD>> превосходящий размером требуемый объём, по возможности расщепляет AD>> его на два и т.д. Мне кажется, что подбор блока минимального AD>> подходящего размера может помочь
VV> Будет ХУЖЕ. Потому, что быстро образуется большое количество мелких VV> дырок в памяти, в которые уже ничего не влазит и которые плохо VV> консолидируются. VV> Обычно стратегия аллокировать наоборот из самого большого блока VV> работает лучше.
Мндя... Наилучшим алгоритмом оказалось разбить все запросы на два класса - до 4К включительно и свыше. Для первых размер запроса округляется до этих самых 4к, поиск начинается с начала списка и предпочтение отдаётся
2
**N блокам, в первую очередь самым подходящим (best fit). Для вторых - наоборот, с конца и не-2
**N и, по прежнему, best fit. В результате "осадок" сократился до около 29к. Но теперь меня начали мучить сомнения: а вдруг это не фрагментация, а всё-таки утечка?! Ой-ой-ой...
AD>> Hо это только мои домыслы. Hе ткнёт ли кто-нибудь в ссылку на AD>> теорию %subj'а?
VV> А придется тебе делать сборку мусора.
Невозможно.
With best regards, Alexander Derazhne