ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
123190 Топик полностью
ig_z (17.06.2008 13:08, просмотров: 254) ответил Evgeny_CD на Идя просто отличная! Я, конечно, что-то подобное видел, но, как водится, несколько подзабыл. Это действительно кардинальное решение проболемы фрагментации памяти. Вопрос в том, сколько накладных расходов на каждый блок получится? Проца и доп. памяти
ИМХО правильнее сказать, идея узкозаточенная на то, что кол-во запросов какого либо размера не превысит имеющееся число блоков данного размера. Иначе имеем ситуацию, когда память есть, а выделить не можем, а если выделяем, то теряем эффективность dms. Более правильно иметь именно фиксированные размеры блоков памяти и при освобождении выполнять процедуру слияния соседних свободных блоков. Мне известны два способа организации такого механизма - битмап и связный список. Наиболее простой и быстрый - битмап. Скажем есть у нас 2048 байт непрерывной памяти. Предположим единица выделяемого размера - 32 байта. Мы имеем 64 блока памяти. Для управления этого хозяйства необходимо 8-ми байтная битмапа. Если блок занят - ставим в нужный бит 1. При освобождении сбрасываем в 0. При этом свободные соседние блоки сливаются автоматически. При выделении блока определенного размера мы просто ищем цепочку нулей нужной длины. Все операции построены на сдвигах и логике. Вроде в свое время борланд использовал в своих ранних продуктах (когда 640 кб хватало на все :)