![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Распределение памяти |
┌│Введение 1. Области данных 2. Описатели 3. Память для данных элементарных типов 4. Память для массивов Векторы Матрицы Многомерные массивы 5. Память для структур Записи по Хоору Структуры PL/1 Структуры данных по Стендишу 6. Соответствие фактических и формальных параметров Вызов по ссылке Вызов по значению Вызов по результату Фиктивные аргументы Вызов по имени Имена массивов в качестве фактических параметров Имена процедур в качестве фактических параметров 7. Динамическое распределение памяти Метод помеченных границ для распределения памяти Сборка мусора Системы с двухуровневым распределением памяти 8. Объектно-ориентированные языки. Новые информационные структуры и память для них Введение Задачей распределения памяти является вычисление адресов для фрагментов программы и информационных объектов, исходя из фиксируемого при генерации взаимного их расположения, причем для адресов тех объектов, расположение которых в памяти нельзя определить статически ( при трансляции ), генерируются динамические вычисления этих адресов. Информационные объекты в процессе эволюции языков программирования также развивались - от простых переменных целого, символьного типов до субстанций которыми оперируют современные объектно-ориентированные языки. Ниже будут изложены механизмы распределения памяти для самых разнообразных информационных объектов. 1. Области данных Областью данных является ряд последовательных ячеек - блок оперативной памяти, - выделенный для данных, каким-то образом объединенных логически. Часто ( но не всегда ) все ячейки области данных принадлежат одной и той же области действия в программе на исходном языке; к ним может обращаться один и тот же набор инструкций ( т.е. этой областью действия может быть блок или тело процедуры ). Во время компиляции ячейка для любой переменной времени счета может быть представлена упорядоченной парой чисел ( номер области данных, смещение ), где номер области данных - это некоторый единственный номер, присвоенный области данных, а смещение - это адрес переменной относительно начала области данных. Когда мы генерируем команды обращения к переменной, эта пара переводится в действительный адрес переменной. Это обычно выполняется установкой адреса базы ( машинного адреса первой ячейки ) области данных на регистр и обращению к переменной по адресу, равному смещению плюс содержимое регистра. Пара ( номер области данных, смещение ) таким образом переводится в пару ( адрес базы, смещение ). Области данных делятся на два класса - статический и динамический. Статическая область данных имеет постоянное число ячеек, выделенных ей перед началом счета. Эти ячейки выделяются на все время счета. Следовательно, на переменную в статической области данных возможна ссылка по ее абсолютному адресу вместо пары ( адрес базы, смещение ). Динамическая область данных не всегда присутствует во время счета. Она появляется и исчезает, и всякий раз, когда она исчезает, теряются все величины, хранящиеся в ней. 2. Описатели Если компилятор знает все характеристики переменных во время компиляции, то он может сгенерировать полностью команды обращения к переменным, основываясь на этих характеристиках.
Но во многих случаях информация может задаваться динамически во время счета. Например, в АЛГОЛе не известны нижняя и верхняя границы размерностей массивов, а в некоторых языках тип фактических параметров не соответствует точно типу формальных параметров. В таких случаях компилятор не может сгенерировать простые и эффективные команды, так как он должен учитывать все возможные варианты характеристик. Чтобы решить эту задачу, компилятор выделяет память не только для переменных, но и для их описателей, которые содержат атрибуты ( характеристики ), определяемые во время счета. Этот описатель заполняется и изменяется по мере того, как становятся известными и меняются характеристики при счете. Возьмем простой пример: если формальный параметр является простой переменной и тип соответствующего фактического параметра может меняться, фактический параметр, передаваемый процедуре, может выглядеть, например, так: │ Описатель 0 = действительный, 1 = целый, 2 = булевый и т.д. │ │ Адрес значения ( или само значение ) │ Если в процедуре есть обращение к формальному параметру, процедура должна запрашивать или интерпретировать этот описатель и затем выполнить любое необходимое преобразование типа. Эти действия можно, конечно, выполнить, обращаясь к другой программе. Во многих случаях компилятор не может выделитъ память для значений переменных, так как неизвестны атрибуты размерности. Так происходит с массивами в АЛГОЛе. Все, что компилятор может сделать, - это выделить память в области данных для описателя фиксированной длины, описывающего переменную. Во время выполнения программы, когда станут известны размерности, будет вызвана программа GE AREA ( которая чаще всего является функцией операционной системы ), которая выделит память и занесет в описатель адрес этой памяти. При этом ссылка на значение всегда выполняется с помощью такого описателя. Для структур или записей требуются более сложные описатели, в которых указывается, как связаны между собой компоненты и подкомпоненты. Эти механизмы будут рассмотрены ниже. Чем больше атрибутов могут меняться при счете, тем больше приходится выполнять работы во время счета. 3. Память для данных элементарных типов Типы данных исходной программы должны быть отображены на типы данных машины. Для некоторых типов это будет соответствием один к одному ( целые, вещественные и т. д. ), для других могут понадобиться несколько машинных слов. Можно отметить следующее: 1) Целые переменные обычно содержатся в одном слове или ячейке области данных; значение хранится в виде стандартного внутреннего изображения целого числа в машине. 2) Вещественные переменные обычно содержатся в одном слове. Если желательна большая точность, чем возможно представить в одном слове, то может быть употреблен машинный формат двойного слова с плавающей запятой. В машинах, где отсутствует формат с плавающей запятой, могут быть употреблены два слова - одно для показателя степени, второе для ( нормализованной ) мантиссы. Операции с плавающей запятой в этом случае должны выполняться с помощью подпрограмм. 3) Булевы или логические переменные могут содержаться в одном слове, причем нуль изображает значение FALSE, а не нуль или 1 -- значение RUE.
Конкретное представление для RUE и FALSE определяется командами машины, осуществляющими логические операции. Для каждой булевой переменной можно также использовать один бит и разместить в одном слове несколько булевых переменных или констант. 4) Указатель - это адрес другого значения ( или ссылка на него ). В некоторых случаях бывает необходимо представлять указатель в двух последовательных ячейках; одна ячейка содержит ссылку на описатель или является описателем текущей величины, на которую ссылается указатель, в то время как другая указывает собственно на значение величины. Это бывает необходимо в случае когда во время компиляции невозможно определить для каждого использования указателя тип величины, на которую он ссылается. 4. Память для массивов Мы предполагаем, что каждый элемент массива или вектора занимает в памяти одну ячейку. Случай большего числа ячеек полностью аналогичен.Векторы Элементы векторов ( одномерных массивов ) обычно помещаются в последовательных ячейках области данных в порядке возрастания или убывания адресов. Порядок зависит от машины и ее системы команд. Мы предполагаем, что используется стандартный возрастающий порядок, т. е. элементы массива, определенного описанием ARRAY А , ., А .Матрицы Существует несколько способов размещения двумерных массивов. Обычный способ состоит в хранении их в области данных по строкам в порядке возрастания, т. е. ( для массива, описанного как ARRAY А , ., А , . А . Вид последовательности показывает, что элемент А находится в ячейке с адресом ADDRESS ( A ) (i-1) (j-1) который можно записать так: ( ADDRESS ( A ) - - 1 ) ( i j ) Первое слагаемое является константой, и его требуется вычислить только один раз. Таким образом, для определения адреса А необходимо выполнить одно умножение и два сложения. Второй метод состоит в том, что выделяется отдельная область данных для каждой строки и имеется вектор указателей для этих областей данных. Элементы каждой строки размещаются в соседних ячейках в порядке возрастания. Так, описание ARRAY А порождает │ Указатель на строку 1 A │ │ Указатель на строку 2 └─┤ A │ │ . │ │ Указатель на строку M A │ указателей строк хранится в той области данных, с которой ассоциируется массив, в то время как собственно массив хранится в отдельной области данных. Адрес элемента массива А есть CO E S(i-1) (j-1). Первое преимущество этого метода состоит в том, что при вычислении адреса не нужно выполнять операцию умножения. Другим является то, что не все строки могут находиться в оперативной памяти одновременно. Указатель строки может содержать некоторое значение, которое вызовет аппаратное или программное прерывание в случае, если строка в памяти отсутствует. Когда возникает прерывание, строка вводится в оперативную память из на место другой строки. Если все строки находятся в оперативной памяти, то массив требует больше места, поскольку необходимо место и для вектора указателей. Когда известно, что матрицы разреженные ( большинство элементов - нули ), используются другие методы. Может быть применена схема хеш-адресации, которая базируется на значениях i и j элемента массива А и ссылается по хеш-адресу на относительно короткую таблицу элементов массива.
связывание, динамическая компоновка dynamicmemory динамическая память dynamic memory allocation динамическое выделение или распределение памяти dynamicmodulesallocation динамическое размещение модулей dynamicprogramloading динамическая загрузка программы dynamicRAM динамическое ОЗУ, динамическая оперативная память dynamicresourceallocation динамическое распределение ресурсов dynamicrouting динамическая маршрутизация dynamicstorage динамическое запоминающее устройство dynamicstoragearea динамическая область памяти, проблемная область памяти dynamicWeb-page динамическая веб-страница dynamical динамичный, активный E E 1
1. Реферат монографии А.А. Смирнова Проблемы психологии памяти
2. Динамическое распределение памяти
3. Динамическое распределение памяти
5. Динамическое распределение памяти
10. Подсистема памяти современных компьютеров
14. Исследование распределения температуры в тонком цилиндрическом стержне
15. Автоматы с магазинной памятью
16. О субстрате следов памяти в мозге
18. Автоматизированная система распределения мест и оценок качества олимпиадных заданий
19. Память, виды памяти, методы тренировки памяти
20. Память. Виды памяти. Объем памяти
21. Моделирование распределения потенциала в МДП-структуре
25. Учет финансовых результатов и распределение прибыли
26. Теория распределения Д. Рикардо
27. Каналы распределения и товародвижения
28. Рациональное распределение ресурсов как один из важнейших аспектов системы финансового менеджмента
29. Учет финансового результата и распределение прибыли
30. Распределение прибыли. Формирование дивидендной политики
32. «Хазарская легенда» и её место в русской исторической памяти
33. Хрущев и Сталин в исторической памяти народа
34. Александр Невский: парадоксы исторической памяти
35. Интегрированные системы управления распределенной корпорацией
36. "Голубые искры народной памяти"
37. Правила распределенности терминов. Преобразование суждений
41. Исследование распределения температуры в тонком цилиндрическом стержне
42. Ортогональные полиномы и кривые распределения вероятностей
43. Распределение уровней внутриглазного давления в нормальной популяции
45. Использование марки как инструмента влияния в каналах распределения
46. Как распределение ролей в команде влияет на успех общего дела
47. Параметры «черных дыр» и природа «темной материи» в двоичной модели распределения плотности вещества
48. Методы оценки близости допредельных и предельных распределений статистик
49. Общее представление о памяти
50. Секреты памяти
51. Развитие памяти. Как правильно использовать свой тип мышления
52. Секретные принципы превосходной памяти
53. Искусство памяти в средние века
57. Индивидуальные особенности памяти и их связь со способностями
58. Эволюция памяти и понятия времени
59. Проблемы памяти
60. Типы памяти
62. Синтез цифрового автомата управления памятью
64. Теория распределения информации
65. Глава семьи: распределение ролей и способ выживания
66. Распределения осужденный к лишению свободу по ИТУ
67. Идеальный газ. Распределение Больцмана
69. Нормальный закон распределения
73. Управление каналами распределения, синтез
75. Распределение зарплаты по наряду путем коэффициента заработка (приработка )
76. Формирование и распределение доходов предприятия. На примере предприятия ЗАО ТТП Орбита
77. Доходы населения и проблемы их распределения
80. Распределение гидрогеодинамических параметров
81. Государственный контроль ресурсной базы на основе мониторинга распределенного фонда недр
83. Озера, их типы и географическое распределение
84. Стандарты внешней флэш-памяти
85. Виды и принципы работы кэш-памяти
89. Классификация оперативной памяти
91. Синхронизация в распределенных системах
92. Спецификация каркаса информационной системы с распределенной архитектурой
93. Концептно-ориентированная модель памяти переводов
94. Адаптивная система VPN в распределенных компьютерных сетях
95. Грид – масштабируемый распределенный компьютинг
96. О поименном увековечивании памяти воинов Великой Отечественной войны