Доброе время суток, через несколько дней у меня экзамен. Помогите разобраться.
Вот вопрос: "Понятие адреса памяти, сегмента, смещения, нормализованного адреса.
Распределение памяти CMA: cегмент кода программы, сегмент данных, стек, динамическая память (куча).
Типы указатель (Pointer) и ссылка (^ тип)"
Как я понимаю:
Адрес - это номер ячейки в сегменте данных(все оперативной области ПК), он состоит из сегмента и смещения.
В свою очередь сегмент - часть оперативной памяти, не превышающая 64 Кбайта и начинающаяся с числа кратного 16. А смещение показывает в каком месте сегмента хранится заданный адрес(то есть, сколько надо пройти от начала сегмента до нужной ячейки в этом сегменте).
Сегмент кода программы-место в сегменте, отведенное под сам код проги.
Сегмент данных-это непрерывная область оперативной памяти пк.
Стек-простейшая динамическая структура. стек придерживается принципа ЛИФО(ласт ин фёст аут). Выборка и добавление элемента в стек происходит в одном месте.
Динамическая память(куча)- это вся оперативная память ПК, за вычетом сегмента(64), смещения и тела проги.
Типы указателей: Указатель - это переменная, которая хранит адрес в качестве своего значения.
Они(Указатели) бывают типизированные и нетипизированные.
Типизированные - ссылка(^). Пример:
var a : ^real;
b : ^integer;
Типизированный указатель ссылается на какой то определенный тип.
Нетипизированный ссылается на неопределенный.
var c : pointer;
a нельзя присвоить b, для этого необходимо сначала c:=b, а потом a:=c;
Все ли я правильно написал? И что такое нормализированный адрес?
Очень хочется узнать ваше мнение!!!
Адреса задаются совокупностью двух шестнадцатиразрядных слов, которые называются сегментом и смещением. Сегмент - это участок памяти, имеющий длину 65536 байт (64 Кбайт) и начинающийся с физического адреса, кратного 16 (т.е. О, 16, 32, 48 и т.д.). Смещение указывает, сколько байт от начала сегмента необходимо пропустить, чтобы обратиться к нужному адресу.
<>Выборка и добавление элемента в стек происходит с одного конца<>
Сегмент данных - область памяти, выделенная под данные программы (т.е. у каждой программы свой сегмент данных)
ну это так, придирки...
GoodWind: Спасибо... Но что такое НОРМАЛИЗОВАННЫЙ адрес???
и еще я не могу понять что значит СМА???
CMA = Control Memory Address
Вообще-то CMA называется Стандартная Память, в которой хранится DOS и программы... Есть еще UMA (Upper Memory Address) - Верхняя Память, содержащая видеопамять и BIOS...
А нормализованным адресом называется адрес, приведенный к виду, в котором его смещение - в интервале $0 .. $F (от 0 до 15)
Кстати:
a := pointer(b);, но все равно: нужно приложить дополнительные усилия. Почему? Потому, что такие операции (приведение типа) потенциально очень опасны, и программист должен показать компилятору, что он НЕ ошибся, а сознательно произвел эту операцию...
volvo: Большое спасибо.. Не подскажешь, где можно почитать о СМА.
З.Ы. Просьба тему не закрывать. Вопросы по динамической памяти и структурам еще будут, но чуть позже.
Доброе время суток Динамические структуры данных: бинарные деревья. Деревья поиска. Сбалансированные деревья
Дерево - это динамическая структура данных, состоящая из узлов и их отношений, образующих иерархическую структуру узлов.
Узлы, которые не имеют потомков, называются листьями. Они(узлы) могут быть любого простого или структуированного типа, но не файлового!!!
Бинарное дерево - это динамическая структура данных, каждый узел которой кроме данных хранит в себе не более двух ссылок на другие двоичные деревья.
Бинарное дерево является рекурсией, так как каждое пеоддерево является в свою очередь самостоятельным деревом.
Дерево поиска - это бинарное дерево, в котором каждый ключ его левого поддерева меньше ключа его узла, а каждый ключ его правого поддерева больше.
Высота дерева определяется количеством его уровней.
Сбалансированное дерево - это двоичное дерево, в котором количество узлов справа и слева отличается не более чем на единицу.
Удаление элементов из дерева:
1) Если узел является листом, то его просто обнуляют.
2) Если узел содержит только одного потомка, то тот встаёт на его место.
3) Если узел имеет двух потомко, то на его место ставится либо самый правый узел его левого поддерева, либо самый левый узел его правого поддерева.
Я прав??? Что еще можно к этому добавить?
З.Ы. Если я хочу узнать про особенности работы 4 параметра в процедуре Blockread и blockwrite, мне нужно заводить новую тему?
Жду ваших дополнений...
Экзамен оказывается у меня завтра, точнее уже сегодня..... Пожелайте мне удачи..... ОНА мне очень нужна!!!
volvo:Большое спасибо!!
Можно тебя попросит: напиши плиз четкое определение записи с вариантной частью...
Моё вот: Записи с произвольным числом вариантов структур - называются записью с вариантами...
Как то криво звучит...
Ну, я бы привел вот такое определение: