Среднее использование памяти - алгоритм анализа - PullRequest
1 голос
/ 20 января 2012

Как видно из заголовка, у меня возникли некоторые трудности с анализом использования памяти в среднем регистре для выделения памяти ( quick-fit ). Моя цель - определить внутреннюю фрагментацию выделенного блока в среднем случае (с использованием быстродействующего распределителя памяти).

Пока я нигде не получил, так как не знаю, как анализировать средний случай. Сначала я подумал, что у вас есть T (n) , то есть память тратится впустую при выделении блока памяти размером n (внутренняя фрагментация). Кроме того, предположим, что вероятность выделения блока памяти размером n равна P (n), тогда средняя трата памяти случая должна в основном быть суммой T (n1) P (n1) + ( Tn2) P (n2) + .... + T (nk) P (nk)

Проблема в том, что я не знаю T (n) и P (n) .. или это вообще возможно без каких-либо предположений?

В худшем случае я просто думаю, что это O (n-1) = O (n). Поскольку в худшем случае у нас есть только один «быстрый список», который обрабатывается, скажем, first-fit . Тогда худший возможный сценарий состоит в том, что у нас есть только один большой блок размером n байтов, доступный для выделения, и запрошенная память занимает всего 1 байт, тогда n-1 байт теряется максимум?

Я не могу иметь никакого смысла, но любая помощь в разъяснении этого важна. Спасибо

1 Ответ

2 голосов
/ 20 января 2012

Пусть T (n) будет потерянным пространством при выделении размера n. Должно быть очень просто вычислить T (n), верно? Для размера блока b T (n) = b - (n% b)?

Вторая часть более тонкая. Это будет зависеть от распределения размера запроса на распределение. Вероятно, вы можете предположить, что потери будут одинаковыми, и в этом случае ваши средние отходы будут b / 2.

Вывод b / 2: вероятность того, что потери i будут равны 1 / b для любого i (равномерное допущение). Ожидаемая потеря = sum_i Вероятность_i Потеря_i = 0 / b + 1 / b + .... + (b-1) / b = (b-1) / 2, что приблизительно равно b / 2.

...