2012-01-19 3 views
1

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

До сих пор я не получил никуда, так как я действительно не знаю, как анализировать средний случай. Мои первые мысли заключались в том, что у вас есть 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). Так как в худшем случае у нас есть только один «быстрый список», который обрабатывается, скажем, в первую очередь. Тогда самый худший возможный сценарий состоит в том, что у нас есть только один большой блок размером n байтов, доступный для выделения, а запрошенная память составляет всего 1 байт, тогда n-1 байт пропадает больше всего?

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

+0

Можете ли вы начать с примера? Предположим, у вас есть память объемом 10 байт (livin large!). Если вы выделите 5 байтов, оставшиеся 5 байтов будут потрачены впустую? Или это зависит от вероятности нахождения требования к распределению, которое меньше 5 байтов? – ElKamina

+0

Да, точно так же, как вы сказали, если у нас есть 10-байтовый блок, и мы только запросили 5 байт, тогда оставшиеся 5 байтов потрачены впустую. –

ответ

2

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

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

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

+0

им действительно не следует за вами на второй части. Я согласен с тем, что можно принять предположение о равномерном изнашивании. Но как вы добираетесь до b/2? Я имею в виду, что у нас есть #k быстрых списков, и каждый из них выбирается с той же вероятностью? не дает нам (b- (n% b))/k ..? –

+0

@me_L_coding см. Обновленное решение – ElKamina

+0

Спасибо большое ElKamina, я думаю, я получил его сейчас .. :) :) –

Смежные вопросы