Студопедия — Динамическая память
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Динамическая память






Динамические структуры данных.

Указатели

Статические и динамические структуры данных.

Динамическая память

Типы данных, рассмотренные до сих пор, являются статическими. Данные этих типов имеют один и тот же размер и формат на протяжении выполнения всего блока, в котором были объявлены.

Во время компиляции для каждой статической переменной (и типизованной константы) в соответствии с ее типом выделяется определенный объем памяти, который нельзя использовать для других целей до завершения работы программы. Количество переменных является постоянным на протяжении всей работы программы.

Динамические типы данных позволяют изменять количество данных в программе во время выполнения программы, образовывать, выделять для них память и уничтожать, когда в них отпадет необходимость.

Необходимость в них возникает при обработке больших объемов данных (поскольку память, выделяемая под статические данные, не может превышать 64К), а также в случае использования данных, объем и содержание которых существенно меняется по ходу выполнения программы (т.е. для организации структур данных, которые по своей природе динамичны).

Во время работы программы динамические переменные располагаются в специальной динамически распределяемой области памяти или куче (Heap).

Во время выполнения программы система выделяет три сегмента: сегмент кода, сегмент данных, сегмент стека. Префиксный сегмент программы (PSP) — область длиной 256Б — строится DOS при загрузке файла имя. exe. Адрес сегмента PSP сохраняется в предопределенной переменной PrefixSeg длиной в слово.

Сегмент кода адресуется через регистр CS (содержимое не изменяется во время выполнения программы). Основная программа занимает первый сегмент кода. Следующие сегменты занимают коды модулей (если они есть) в порядке, обратном описанному в предложении Uses. Последний сегмент кода занят кодом модуля System. Размер каждого отдельного сегмента кода не может превышать 64К, а общий размер сегмента кода ограничен только объемом имеющейся памяти.

Сегмент данных адресуется через регистр DS (содержимое не изменяется во время выполнения программы). Он содержит все типизованные константы, за которыми следуют все глобальные переменные. Размер сегмента данных не может превышать 64К.

В сегменте стека располагаются локальные переменные процедур и функций. При входе в программу регистр сегмента стека SS и указатель стека SP загружаются так, что адрес SS:SP указывает на первый байт, следующий за сегментом стека. Содержимое регистра SS в процессе выполнения программы не изменяется, а SP перемещается вниз, пока не достигнет нижней границы стека. Размер стека не может превышать 64К. По умолчанию ему назначается размер 16К (можно изменить с помощью директивы компилятора {$M}, а с помощью директивы {$S} проверить на переполнение).

Оверлейный буфер используется для программ с перекрытиями.

 


Схема распределения памяти программы на Паскале:

Увеличение адресов →     Верхняя граница памяти операционной системы  
  Куча ┌───^───┐ Свободная Память FreePtr HeapPtr
Динамически распределяемая область памяти ↑ (расширение) HeapOrg
    Оверлейный Буфер OvrHeapEnd OvrHeapOrg
  Область стека (≤ 64 К, по умолч. 16 К) ┌───^───┐ Сегмент Стека (расширение) ↓  
  Свободная область стека SSeg: SPtr     SSeg: 0000
Образ файла имя.exe ┌──────────────^───────────────┐ Сегмент данных (≤ 64 К) ┌─^─┐ Глобальные переменные  
Типизованные константы   DSeg: 0000
Сегмент кода ┌────────^────────┐ Сегмент кода модуля System (≤ 64 К)  
Сегмент кода первого модуля (≤ 64 К)  
...  
Сегмент кода последнего модуля (≤ 64 К)  
Основная программа (≤ 64 К)   CSeg: 0000
256 Б Префиксный сегмент программы (PSP) PrefixSeg

 

В динамически распределяемой области памяти (Heap) сохраняются динамические переменные. Она занимает всю свободную память или часть свободной памяти, оставшуюся при выполнении программы. Действительный размер области зависит от максимального и минимального значений, которые можно установить с помощью директивы компилятора {$M}. Гарантированный минимальный размер области не может быть меньше минимального значения, установленного для данной области. Максимальный размер никогда не может превышать заданного для нее максимального значения. Если указанный минимальный объем недоступен — программа не выполняется. По умолчанию минимальный размер равен 0К, максимальный — 1МБ (т.е. вся свободная адресуемая память).

Управляет (непосредственно при работе программы) динамически распределяемой областью памяти программа динамического распределения памяти (администратор кучи) — часть библиотеки модуля System. Динамически распределяемая область памяти — структура, похожая на стек, но расширяющаяся от младших адресов к старшим. Нижняя граница записывается в переменной HeapOrg, верхняя — в HeapPtr. При каждом выделении памяти для динамической переменной HeapPtr перемещается вверх.

Адреса

Память компьютера представляет собой совокупность элементарных ячеек для хранения информации — байтов, каждый из которых имеет собственный номер или адрес, что позволяет обращаться к любому байту памяти. Адреса задаются совокупностью двух шестнадцатиразрядных слов, которые называются сегментом и смещением. Сегмент — это участок памяти, имеющий длину 64К и начинающийся с физического адреса, кратного 16 (т.е. 0, 16, 32, 48 и т.д.). Смещение указывает, сколько байт от начала сегмента необходимо пропустить, чтобы обратиться к нужному адресу.

Адресное пространство компьютера составляет 1М. Для адресации в этих пределах нужно 20 двоичных разрядов, которые получаются из двух шестнадцатиразрядных слов (сегмента и смещения) следующим образом: содержимое сегмента смещается влево на 4 разряда, освободившиеся правые разряды заполняются нулями, результат складывается с содержимым смещения.

Физический адрес = Сегмент + Смещение







Дата добавления: 2015-08-12; просмотров: 418. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Ученые, внесшие большой вклад в развитие науки биологии Краткая история развития биологии. Чарльз Дарвин (1809 -1882)- основной труд « О происхождении видов путем естественного отбора или Сохранение благоприятствующих пород в борьбе за жизнь»...

Этапы трансляции и их характеристика Трансляция (от лат. translatio — перевод) — процесс синтеза белка из аминокислот на матрице информационной (матричной) РНК (иРНК...

Условия, необходимые для появления жизни История жизни и история Земли неотделимы друг от друга, так как именно в процессах развития нашей планеты как космического тела закладывались определенные физические и химические условия, необходимые для появления и развития жизни...

ЛЕЧЕБНО-ПРОФИЛАКТИЧЕСКОЙ ПОМОЩИ НАСЕЛЕНИЮ В УСЛОВИЯХ ОМС 001. Основными путями развития поликлинической помощи взрослому населению в новых экономических условиях являются все...

МЕТОДИКА ИЗУЧЕНИЯ МОРФЕМНОГО СОСТАВА СЛОВА В НАЧАЛЬНЫХ КЛАССАХ В практике речевого общения широко известен следующий факт: как взрослые...

СИНТАКСИЧЕСКАЯ РАБОТА В СИСТЕМЕ РАЗВИТИЯ РЕЧИ УЧАЩИХСЯ В языке различаются уровни — уровень слова (лексический), уровень словосочетания и предложения (синтаксический) и уровень Словосочетание в этом смысле может рассматриваться как переходное звено от лексического уровня к синтаксическому...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия