Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

14.1. Управление памятью 671

от того, где это кончило ранее, рассмотрев бесплатный список как циркулярный связанный список

(Раздел 3.4.1). Хуже-пригодный алгоритм ищет бесплатный список, чтобы найти самое большое отверстие доступной памяти, которая могла бы быть сделана быстрее, чем поиск всего бесплатного списка, если бы этот список велся как приоритетная очередь (Глава 8). В каждом алгоритме требуемый объем памяти вычтен из выбранного отверстия памяти, и оставшаяся часть того отверстия возвращена к бесплатному списку.

Хотя это могло бы казаться хорошим сначала, хорошо-пригодный алгоритм имеет тенденцию производить худшую внешнюю фрагментацию, так как оставшиеся части выбранных отверстий имеют тенденцию быть маленькими. Алгоритм первой подгонки быстр, но он имеет тенденцию производить большую внешнюю фрагментацию впереди бесплатного списка, который замедляет будущие поиски. Следующий пригодный алгоритм распространяет фрагментацию более равномерно всюду по куче памяти, таким образом поддерживая времена поиска на низком уровне. Это распространение также делает его более трудным к allo-cate большие блоки, как бы то ни было. Хуже-пригодный алгоритм пытается избежать этой проблемы, держа смежные разделы бесплатной памяти как можно больше.

14.1.2 Сборка мусора

В C ++, место в памяти для объектов должно быть явно ассигновано и освобождено

программистом с помощью новых операторов и удаляют, соответственно. Другие языки программирования, такие как Ява, помещают бремя человека памяти - agement полностью на окружающей среде во время выполнения. В этой секции мы обсуждаем, как системы во время выполнения языков как Ява управляют памятью, используемой объектами, ассигнованными новой операцией.

Как упомянуто выше, память для объектов ассигнована от кучи памяти, и пространство для членских переменных бегущей программы помещены в ее стеки требования, один для каждой бегущей программы. Так как членские переменные в стеке требования могут относиться к объектам в куче памяти, все переменные и объекты в стеках требования управления нитями называют объектами корня. Все те объекты, которые могут быть достигнуты следующими объектными ссылками, которые начинаются с объекта корня, называют живыми объектами. Живые объекты, в настоящее время - активные объекты используясь бегущей программой; эти объекты не должны быть освобождены. Например, бегущая программа может сохранить, в переменной, ссылке на последовательность S, который осуществлен, используя вдвойне связанный список. Справочная переменная к S - объект корня, в то время как объект для S - живой объект, как все объекты узла, на которые ссылаются от этого объекта и всех элементов, на которые ссылаются от этих объектов узла.

Время от времени окружающая среда во время выполнения может заметить, что свободное место в куче памяти становится недостаточным. В такие времена система может выбрать исправлять пространство, которое используется для объектов, которые больше не живы, и возвращают исправленную память бесплатному списку. Этот процесс восстановления известен как сборка мусора. Есть несколько различных алгоритмов для сборки мусора, но один из наиболее используемых - алгоритм зачистки отметки.

672