Главная » Просмотр файлов » Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)

Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 127

Файл №1160801 Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)) 127 страницаТ. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801) страница 1272019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 127)

Ни один язык высокого уровня не может позволить программисту брать на себя все заботы по распределению памяти. Например, едва ли можно ожидать, что программист будет заниматься выделением временной памяти для хранения промежуточных результатов вычислений, точек возврата из подпрограмм или других системных данных. В лучшем случае программист мог бы управлять распределением памяти для локальных данных (и, возможно, программ), Но даже простое размещение в памяти структур данных или освобождение памяти, допустимые в С, с большой вероятностью ведут к появлению мусора и повисших ссылок. Таким образом, управление распределением памяти программистом представляет опасность и для самого программиста, так как может приводить к тонким ошибкам или потере доступа к свободным областям памяти. Распределение памяти, осуществляемое программистом, также может вмешиваться в распределение памяти, осуществляемое системой, по той причине, что могут потребоваться специальные области памяти и специальные программы управления ею, приволящие к менее аффективному использованию памяти в целом.

Преимущество возможности управления распределением памяти программистом заключается в том, что часто системе бывает исклю штельно трудно определить, когда наиболее целесообразно занимать и освобождать память. Программист же часто знает достаточно точно, когда необходима конкретная структура данных, а когда она больше не нужна и занимаемая ею память может быть освобождена, >0.3. Статическое управление памятью 463 Эта дилемма ни в коем случае не может считаться тривиальной и часто является центральной при выборе языка для реализации определенного проекта. Следует ли выбрать строго типизированный язык с эффективной системой управления памятью, который обеспечивает надежность выполнения программ с соответствующим уменьшением скорости выполнения, или следует предпочесть язык, позволяющий ускорить выполнение программ (например, за счет увеличения скорости вычисления и распределения ресурсов памяти) с соответствующим увеличением вероятности возникновения ошиб>ок, зависания и даже непредвиденных остановок программы? Это один из фундаментальных вопросов, обсуждаемых в среде специалистов в области технологии программирования.

В данной книге нет решения этой проблемы, наша основная цель — предоставить читателю соответствуюгцую подробную информацию для того, чтобы он мог самостоятельно принимать решение в каждом конкретном случае. Фазы управления памятью Принято выделять три основных аспекта управления памятью. Е Начальное распределение. В момент начала выполнения программы каждый блок памяти может быть либо занят, либо свободен. Если первоначально блок памяти свободен, то он доступен для динамического распределения в процессе выполнения программы. Любая система управления памятью требует наличия какого-либо метода для отслеживания н учета свободной памяти, а также механизма, позволяющего распределять эту память по мере необходимости в процессе выполнения программы.

2. Воссл>ановление памяти. Память, которая была распределена и использовалась в течение какого-то времени, после того как занимающий ее объект перестал быть нужным, должна быть восстановлена для повторного использования. Восстановление памяти может быть очень простым, как в случае перемещения указателя стека, или очень сложным, как в случае сбора мусора. 3. Уплотнелиеипоаторноеислользовавие. Восстановленнаяпамятьможетбыть сразу же повторно использована, но может потребоваться и процедура ее уплотнения — построение более крупных блоков свободной памяти из маленьких.

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

10.3. Статическое управление памятью Простейший способ распределения памяти — это статическое распределение, то есть распределение во время трансляции, которое остается неизменным во время 464 Глава 10. Управление памятью выполнения. Обычно для сегментов кода пользовательских и системных программ, а также для буферов ввода-вывода и различных системных данных память распре. деляется статически. Такое распределение памяти не требует выполнения каких- либо действий по управлению памятью во время выполнения программы, и конечно, в таком случае вопросы восстановления и повторного использования памяти отпадают. В обычной реализации РОКТКАХ вся память распределяется статически.

Каждая подпрограмма компилируется отдельно, при этом компилятор создает сегмент кода 1включая запись активации), содержащий скомпилированную программу, ее области данных, временные переменные, точку возврата, а также различные системные данные. Загрузчик выделяет пространство в памяти для этих скомпилированных блоков во время загрузки, так же как и для системных программ, необходимых во время выполнения. Бо время выполнения программы не требуется никакого управления памятью.

Статическое распределение памяти эффективно, так как не требует дополнительных временных н пространственных затрат на управление памятью в процессе выполнения. Транслятор может непосредственно сгенерировать1 значения (адреса) для всех элементов данных. Однако статический метод несовместим с рекурсивным вызовом подпрограмм, со структурами данных, чьи размеры зависят от входных или вычисляемых в программе данных, а также со многими другими желательными возможностями языка.

В следующих разделах этой главы мы обсудим различные методы динамического (во время выполнения) управлепия намипью. Читатель тем не менее не должен упускать из виду важность статического распределения памяти, Два широко используемых языка программирования, ГОКТКАХ и СОБО1, разработаны в расчете на исключительно статическое распределение памяти (хотя, как было уже сказано, теперь РОКТКАХ 90 позволяет использовать динамические массивы и рекурсивные процедуры), В языках, подобных С, которые используют динамическое распределение памяти, допускается также и статическое управление для повышения эф<рективности.

10.4. Управление кучей Третий основной вид управления памятью после стекового и статического называется управлением кучей. Куча — это блок памяти, области которого выделяются и освобождая>тся некоторым относительно произвольным образом. В этом случае проблемы выделения, восстановления, уплотнения и повторного использования памяти могут стать весьма серьезными.

Не существует какого-либо одного метода управления кучен; скорее, следует говорить о наборе методов для регулирования различных аспектов управления прн такой организации памяти. Необходимость в куче возникает то~да, когда язык позволяет распределять и освобождать память в произвольных точках выполнения программы, а также тогда, когда язык предоставляет средства для создания, разрушения и раси>ирения пользовательских структур данных в произвольных местах программы. Например, в М1 в любой момент можно объединить два списка в один или динамически определить новый тин данных. В 1.16Р в любой точке программы к существующему 10.4.

Управление кучей 465 списку может быть добавлен новый элемент, что опять-таки требует выделения дополнительной памяти. Б обоих этих языках возможно также освобождение памяти в непредсказуемые моменты во время выполнения. Методы управления кучей удобно разделить на две категории в зависимости от того, имеют ли размещаемые в куче элементы один и тот же фиксированный размер или их размер может меняться. В первом случае методы управления можно значительно упростить, Уплотнение, в частности, перестает быть проблемой, так как вссдоступные элементы имеют один и тот же размер.

В этом разделе мы рассмотрим случай с элементами фиксированного размера, а более сложный случай с элементами переменного размера рассмотрим в следующем разделе. 10.4.1. Обзор языка ЫЗР История. Впервые язык ) 15Р был разработан и реализован группой программистов под руководством Джона Мак-Карти ()опп МсСагг!1у) из Массачусетсского технологического института (МТИ) примерно в 1960 г. (80]. Этот язык широко использовался для научных исследований, в основном в области искусственного интеллекта (робототехника, обработка естественных языков, доказательство теорем, системы искусственного интеллекта).

За последние тридцать лет было разработано множество версий языка П5Р. Из всех описанных в этой книге языков только 115Р не стандартизирован и не имеет какой-либо одной доминирующей реализации. 1 15Р во многих аспектах отличается от болыпинства других языков. Наиболее удивительная особенность Ы5Р— это эквивалентность форм представления в языке программ и данных, что позволяет выполнять структуры данных как программы и модифицировать программы как данные. Другой отличительной особенностью является применение в качестве основной управляющей структуры рекурсии, а не итерации (циклов), как в большинстве других языков программирования.

Как сказано ранее, 1.15Р зародился в МТИ приблизительно в 1960 г. В 60-е и 70-е гг. появилось множество версий этого языка, Б числе прочих существовали Мас1лр в МТИ, 1пгег!!зр для 1)ЕС Р()Р-10, разработанный Уорреном Тейтслманом (%аггеп Те!ге!шап), а также были 5ргсс 115Р и Ргапа Ы5Р. Основной доминирующей версией в это время был 1пгег!1э)ь Во второй половине 70-х гг. Джеральд Сьюсманн (Сега!о 5пвшапп) и Гай Стил (Оцу 5гее!) в процессе исследования моделей вычисления разработали очередную версию языка, получившую название 5спешег.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее