Если все ваши ресурсы примерно одинакового размера, просто разделите вашу память на TOTAL/MAXSIZE
частей, каждая из которых состоит из MAXSIZE
байтов.Тогда фрагментация не имеет значения.
Чтобы ответить на ваш вопрос в целом, магического числа для «фрагментации» не существует.Вы должны оценить достоинства различных функций, отражая фрагментированную память.Вот один, который я бы порекомендовал, в зависимости от размера n
:
fragmentation(n) = -log(n * number_of_free_slots_of_size_n / total_bytes_free)
Обратите внимание, что log
как раз для отображения вещей в масштабе от 0 до бесконечности;Вы не должны на самом деле оценить это на практике.Вместо этого вы можете просто оценить:
freespace_quality(n) = n * number_of_free_slots_of_size_n / total_bytes_free
с 1.0
идеальным (способным выделить максимально возможное количество объектов размером n
) и 0.0
очень плохим (неспособным выделить любой).