Логическая структура памяти программы

в пределах от 16 Мбайт до 512 Мбайт. Емкость ОЗУ на один-два порядка превышает емкость ПЗУ: ПЗУ занимает 128 Кбайт, остальной объем — это ОЗУ. Каждая ячейка памяти имеет свой уникальный адрес. Для ОЗУ и ПЗУ отводится, единое адресное пространство.

Адресное пространство определяет максимально возможное количество непосредственно адресуемых ячеек основной памяти. Адресное пространство зависит от разрядности адресных шин, поскольку максимальное количество адресов определяется разнообразием двоичных чисел, которые можно отобразить в и разрядах, то есть адресное пространство равно 2″, где и — разрядность адреса.

За основу в ПК взят 16-разрядный адресный код, равный по длине размеру машинного слова. При помощи 16-разрядного представления адреса можно непосредственно адресовать всего 2’e = 65 536 = 64 Кбайт ячеек памяти. Это 64-килобайтовое поле памяти, так называемый сегмент, также является базовым в логической структуре ОП. Следует заметить, что в защищенном режиме размер сегмента может быть иным и значительно превышать 64 Кбайт.

Программирование ПЛК. 3. Структура памяти.

Современные ПК (кроме простейших бытовых компьютеров) имеют основную память, емкостью существенно больше 1 Мбайт. Но память до 1 Мбайт является еще одним важным структурным компонентом ОП — назовем ее непосредственно адресуемой памятью (справедливо полностью только для реального режима). Для адресации 1 Мбайт = 2″ = 1 048 576 ячеек непосредственно адресуемой памяти необходим 20-разрядный код, получаемый в ПК при помощи специальной структуризации адресов ячеек ОП.

Абсолютный (полный, физический) адрес формируется в виде суммы нескольких составляющих, чаще всего используемыми из которых являются: адрес сегмента и адрес смещения.

Адрес сегмента (Асегм) — это начальный адрес 64-килобайтового поля, внутри которого находится адресуемая ячейка.

Адрес смещения (Асм) — это относительный 16-разрядный адрес ячейки внутри сегмента.

Асегм должен быть 20-разрядным, но если принять условие, что Асегм должен быть обязательно кратным параграфу (в последних четырех разрядах должен содержать нули), то однозначно определять этот адрес можно 16-разрядным кодом, «увеличенным» в 16 раз, что равносильно дополнению исходного кода справа 4 нулями и превращению его, таким образом, в 20-разрядный код. То есть условно можно записать:

Для удобства программирования и оптимизации ряда операций микропроцессоры ПК поддерживают еще две составляющие смещения: адрес базы и адрес индекса. Следует отметить, что процессор ПК может обращаться к основной памяти, используя только абсолютный адрес, в то время как программист может использовать все составляющие адреса, рассмотренные выше.

В современных ПК существует режим виртуальной адресации (Virtual — мнимый, кажущийся, воображаемый). Виртуальная адресация применяется для увеличения адресного пространства ПК при наличии ОП большой емкости (простая виртуальная адресация), или при организации виртуальной памяти, в которую наряду с ОП включается и часть внешней (обычно дисковой) памяти. При виртуальной адресации вместо начального адреса сегмента Асегм в формировании абсолютного адреса Аабс, принимает участие много разрядный адресный код, считываемый из специальных таблиц. Принцип простой виртуальной адресации можно пояснить следующим образом. В регистре сегмента содержится не Асегм а некий селектор, имеющий структуру:

где СЛ — вспомогательная служебная информация; F — идентификатор, определяющий тип таблицы дескрипторов для формирования А (таблицы дескрипторов создаются в ОП при виртуальной адресации автоматически):

● если F О, то используется глобальная таблица дескрипторов (GDT ), общая для всех задач, решаемых в ПК в многозадачном режиме;

● если F 1, то используется локальная таблица дескрипторов (LDT), создаваемая для каждой задачи отдельно.

В соответствии с индексом и идентификатором из GLT или LDT извлекается — 64-битовая строка, содержащая, в частности, и адрес сегмента. Разрядность этого адреса зависит от размера адресного пространства микропроцессора, точнее равна разрядности его адресной шины. Подобная виртуальная адресация используется в защищенном режиме работы микропроцессора.

Для большей плотности размещения информации в оперативной памяти (уменьшения сегментированности, характерной для многозадачного режима) часто практикуется сегментно-страничная адресация, при которой поля памяти выделяются программам внутри сегментов страницами размером от 2 до 4 Кбайт. Формирование сегментно-страничной, структуры адресов выполняется автоматически операционной системой.

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

При подготовке программ в их код заносятся условные адреса, которые должны быть затем привязаны к конкретному месту в памяти. Распределение памяти может выполняться или в статическом режиме до загрузки программы в ОП, или в динамическом режиме автоматически в момент загрузки программы или в процессе ее выполнения. Статическое распределение памяти весьма трудоемко, поэтому применяется редко. Если очевидно, что реальная память меньше требуемого программой адресного пространства, программист может вручную разбить программу на части, вызываемые в ОП по мере необходимости — создать оверлейную структуру программы. Обычно же используется режим динамического распределения памяти.

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

При этом реально программа может размещаться частично в ОП, частично во внешней памяти на жестком диске.

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

● страниц виртуальной памяти,

● физического размещения страниц,

и устанавливает логические связи между ними (рис. 6.2).

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

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

Читайте также:
Программа написанная на ассемблере может содержать

Для ПК характерно стандартное распределение непосредственно адресуемой памяти между ОЗУ и ПЗУ (рис. 6.3).

Основная память в соответствии с методами обращения и адресации делится на отдельные, иногда частично или полностью перекрывающие друг друга области, имеющие общепринятые названия. В частности, обобщенно логическая структура основной памяти ПК общей емкостью 64 Мбайт представлена на рис. 6.4.

Прежде всего, основная память компьютера делится на две логические области: непосредственно адресуемую память, занимающую первые 1024 Кбайт ячеек садресами от 0 до 1024 Кбайт — 1, и расширенную память, доступ к ячейкам которой возможен при использовании специальных программ-драйверов или в защищенном режиме работы микропроцессора.

Драйвер — специальная программа, управляющая работой памяти или внешними устройствами компьютера и организующая обмен информацией между МП, ОП и внешними устройствами компьютера.

Стандартной памятью (СМА — Conventional Memory Area) называется непосредственно адресуемая память в диапазоне от 0 до 640 Кбайт.

Непосредственно адресуемая память в диапазоне адресов от 640 Кбайт до 1024 Кбайт называется верхней памятью (UMA — Upper Memory Area или UMB — Upper Memory Blocks). Верхняя память зарезервирована для служебной памяти (ранее называлась видеопамятью дисплея) и постоянного запоминающего устройства.

В служебной памяти формируются участки-4окна», используемые при помощи драйверов в качестве оперативной памяти общего назначения.

Расширенная память — память с адресами 1024 Кбайт и выше. В реальном режиме имеются два основных способа доступа к этой памяти:

●по спецификации XMS (память ХМА — Extended Memory Аrеа);

●по спецификации EMS(память ЕМА — Expanded Memory Area).

Доступ к расширенной памяти согласно спецификации XMS (Extended Meтоrу Specification) организуется при помощи специального драйвера (например, XMM — eXtended Memory Manager) путем пересылки по мере необходимости отдельных полей ХМА в свободные области верхней памяти (UMA). Эту память иногда называют дополнительной.

Спецификация EMS(Expanded Методу Specification) является более ранней. Согласно этой спецификации доступ реализуется не путем пересылки, а лишь путем отображения по мере необходимости отдельных полей Expanded Memory в свободные области верхней памяти.

Отображение организуется путем динамического замещения адресов полей ЕМА в «окнах» UMA размером 64 Кбайт, разбитых на 16-килобайтовые страницы. В окне UMA хранится не обрабатываемая информация, а лишь адреса, обеспечивающие доступ к этой информации. Память, организуемая по спецификации EMS, носит название отображаемой.

Поэтому сочетание слов Expanded Memory (ЕМ) иногда переводят как отображаемая память (хотя термин Expanded почти идентичен термину Extended и более точно переводится как расширенный, увеличенный). Для организации отображаемой памяти при работе в реальном режиме процессора необходим драйвер ЕММ.ЕХЕ (Expanded Memory Manager). Отображаемая память медленная и поэтому она постепенно уступает место Extended Memory.

В реальном режиме расширенная память может быть использована главным образом для хранения данных и некоторых программ ОС. Часто расширенную память используют для организации виртуальных (электронных) дисков. Исключение составляет НМА,которая может адресоваться и непосредственно при использовании драйвера HIMEM.SYS (High Memory Manager). Область НМА может использоваться для хранения любой информации, в том числе и программ пользователя. Возможность непосредственной адресации высокой памяти обусловлена особенностью сегментной адресации ячеек ОП, поскольку в этой концепции максимально возможный адрес ячейки памяти с непосредственной адресацией формируется из максимально возможного адреса сегмента FFFFF, то есть 10242 — 1 — верхняя граница непосредственно адресуемой верхней памяти, плюс максимально возможный адрес смещения в этом сегменте РРРР — получаем верхнюю границу непосредственно адресуемой высокой памяти.

Дата добавления: 2016-06-22 ; просмотров: 2649 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ

Источник: poznayka.org

Логическая структура памяти программы

Область памяти, в которой размещается программа, делится на разделы по назначению и способам управления данными:

· сегмент кода используется для хранения кода программы – функций. Функции помещаются в сегмент кода на этапе компиляции программы и находятся там до завершения работы программы, поэтому все функции в C имеют глобальное время жизни и существуют в течение всего времени выполнения программы;

· статическая память (сегмент данных) предназначена для хранения переменных в течение всего времени выполнения программы. Если для переменной в какой-либо момент работы программы выделена память в сегменте данных, она там будет находиться до завершения работы программы, даже если эта переменная больше не нужна. По умолчанию в сегменте данных хранятся глобальные переменные;

· стек – это область памяти, в которой хранятся локальные переменные и параметры функций. При вызове функции ее параметры и локальные переменные помещаются в стек. Стек функционирует по принципу стакана – значение, помещенное в стек первым, оказывается на дне стека, в то время как последнее значение – на вершине стека. По завершении работы функции все данные, принадлежащие этой функции, удаляются из стека. Очистка стека начинается с вершины, т. е. со значений, помещенных в стек последними;

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

Особенности классов памяти

Объекты класса auto имеют локальное время жизни и локальную область видимости – только ту функцию или тот блок, где они объявлены. Такие переменные называются автоматическими. По умолчанию, т. е. без указания класса, все переменные, объявленные внутри блока, относятся к классу auto. Переменная класса auto начинает существовать при входе в блок, в котором она объявлена.

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

Объекты класса register также имеют локальное время жизни и локальную область видимости, однако в отличие от автоматических переменных, они размещаются на регистрах процессора и называются регистровыми переменными. Использование регистровой памяти обычно приводит к сокращению времени доступа к переменной. Если по каким-либо причинам переменная не может быть размещена на регистрах процессора, она помещается в стек. Регистровая переменная может быть только целочисленной, и к ней нельзя применить операцию https://studfile.net/preview/1978480/page:4/» target=»_blank»]studfile.net[/mask_link]

Логическая структура памяти программы

Информатика, информационные технологии

Препроцессор – программа, используемая для обработки исходного текста программы на языке С до компиляции и выполняющая следующие действия: поиск и включение в программу нужных внешних файлов; изменение условий компиляции; определение значений констант и т. д.

Препроцессор “общается” с программой при помощи директив. Директивы препроцессора представляют собой инструкции, записанные в тексте программы и выполняемые до ее трансляции.

Директивы препроцессора позволяют изменить текст программы, например, заменить некоторые лексемы в тексте, вставить текст из другого файла, запретить трансляцию части текста и т. п. Директивы препроцессора отмечаются специальным маркером#. Знак # должен быть первым символом в строке, содержащей директиву. Между знаком # и первой буквой директивы могут находиться пробелы. После директив препроцессора точка с запятой не ставится.

Читайте также:
Как уменьшить размер видео на ПК без программ

Директивы препроцессора могут встречаться в любом месте программы, но обычно их стараются помещать в начале для удобства восприятия текста программы. Директивы, появляющиеся в любом месте исходного файла, применимы только к тексту, идущему после этой директивы. Написание директивы препроцессора завершается нажатием клавиши Enter. Для написания директивы в две строки в месте переноса следует нажать комбинацию клавиш [] + [Enter], и директива продолжается в следующей строке.

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

Немного о прототипах функции

В современных программах на языке C каждую функцию перед использованием необходимо объявлять. Объявление функции называется прототипом функции. Например, для функцииMyFunction(), приведенной ранее, прототип будет иметь следующий вид:

Хотя прототипы в языке C формально не требуются, их применение очень желательно. Прототипы дают компилятору возможность тщательно выполнить проверку типов аргументов, правильность их преобразования, обнаружить несоответствия в количестве аргументов, использованных при вызове функции, и в количестве параметров функции.

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

В прототипе функции (в C++ прототип обязателен) должны присутствовать:

— типы и число формальных параметров;

— тип возвращаемого значения.

Формат прототипа тот же, что и у определения функции, но прототип не имеет:

— заголовок оканчивается точкой с запятой.

имя (список формальных параметров);

Функция не может возвращать массив, но может возвращать указатель на любой тип, в том числе и на массив. Тип возвращаемого значения, задаваемый в определении функции, должен соответствовать типу в объявлении этой функции.

Имя функции строится по стандартным правилам записи идентификаторов.

Список формальных параметров — это заключенная в круглые скобки последовательность объявлений формальных параметров, разделенных запятыми.

Формальные параметры — это переменные, используемые внутри тела функции и получающие значения при вызове функции путем копирования в них значений соответствующих фактических параметров.

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

Такой функции может быть передано большее число аргументов, но над дополнительными аргументами не проводится контроль типов , например,

void fn(unsigned c,float b,int a,…); т. е. число аргументов функции fn³3.

Если функция не имеет параметров, то наличие круглых скобок обязательно, а вместо списка параметров рекомендуется указать слово void.

Порядок и типы формальных параметров должны быть одинаковыми в определении функции и во всех ее объявлениях. Тип формального параметра может быть любым основным типом, структурой, объединением, перечислением, указателем или массивом. Типы фактических аргументов при вызове функции должны быть совместимы с типами соответствующих формальных параметров.

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

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

Пример передачи в функцию параметров-значений b и c:

int fn1(int b,float c);

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

В качестве такого параметра можно использовать указатель на некоторую переменную:

Используя операцию косвенной адресации в теле функции, можно изменить значение этой переменной: *pb=6.

Другой способ передачи в функцию адреса переменной – передача параметра по ссылке, при этом в вызванной функции создается псевдоним исходной переменной, форма обращения к такому параметру-ссылке такая же, как и к обычной переменной, а сам параметр передается с помощью адреса, например, int fn3(int ab);при этом обращение к переменной ab в теле функции fn3() такое же, как к обычной переменной типа int.

В функцию не могут быть переданы массив и имя функции, но можно использовать указатели на эти объекты.

Иногда при запуске программы бывает полезно передать ей какую-либо информацию из внешнего окружения (операционной системы). Обычно такая информация передается функции main() с помощью аргументов (параметров) командной строки, содержащей команду запуска программы. Аргумент командной строки – это информация, которая вводится в командной строке операционной системы после имени программы.

Во внешнем окружении действуют свои правила представления данных, а точнее, все данные представляются в виде строк символов. Для передачи этих строк в функцию main() используются два специальных встроенных аргумента (параметра). Первый параметр содержит количество передаваемых строк, второй — сами строки. Общепринятые (но не обязательные) имена этих параметров argc и argv.

Параметр argc имеет тип int, его значение формируется из анализа командной строки и равно количеству слов в командной строке, включая и имя вызываемой программы (под словом понимается любой текст, не содержащий символа пробел). Численно этот параметр всегда больше или равен 1, потому что первым аргументом считается имя программы.

Параметр argv – это массив указателей на строки, каждая из которых содержит одно слово из командной строки. Если слово должно содержать символ пробел, то при записи его в командную строку оно должно быть заключено в кавычки. Обычно argc и argvиспользуют для того, чтобы передать программе начальные команды, которые понадобятся ей при запуске, например, имя файла, параметр и т. д.

Функция main() может иметь и третий параметр, который принято называть envp. Этот параметр служит для передачи в функцию main() параметров операционной системы (среды), в которой выполняется С-программа.

В итоге заголовок функции main() имеет вид:

Читайте также:
Дополнительные общеразвивающие программы имеют право реализовывать

int main(int argc, char *argv[], char *envp[]).

Операционная система поддерживает передачу значений для параметров argc, argv, envp, а на пользователе данного исполняемого файла лежит ответственность за передачу фактических аргументов функции main().

Оператор выбора switch

Оператор выбора switch (или переключатель) предназначен для выбора ветви вычислительного процесса исходя из значения управляющего выражения. Использование данного оператора целесообразно при сложном условном ветвлении.

Структура оператора следующая:

case константное выражение : оператор или группа операторов

case константное выражение : оператор или группа операторов

default : оператор или группа операторов

Значение выражения оператора switch должно быть целочисленным. Это означает, что в выражении можно использовать переменные только целого или символьного типа. Результат вычисления выражения по очереди сравнивается с каждым из константных выражений. Если в какой-либо строке находится совпадение, управление передается на соответствующую метку case, и выполняется связанная с ней группа операторов. Выполнение продолжается до конца тела оператора switch или пока не встретится оператор break, который передает управление из тела switch оператору, следующему за закрывающей данную конструкцию фигурной скобкой.

Применение оператора break в контексте блока switch является обычным. Без него после выполнения варианта case, который соответствует значению управляющего выражения, оператор switchпродолжит свою работу, при этом будут выполнены все последующие варианты caseи ветка default.

Оператор, связанный с default, выполняется, если выражение не совпало ни с одним из константных выражений в case. Оператор defaultне обязательно располагается в конце конструкции. Кроме того, он и сам не обязателен. В этом случае при отсутствии совпадений не выполняется ни один оператор. Не допускается совпадение константных выражений.

Пример 1. По номеру дня недели, введенному с клавиатуры, вывести на экран название дня недели:

printf(Введите номер дня неделиn);

default: printf(Ошибка вводаn);

В этом примере переменная day, управляющая оператором switch, имеет символьный тип. При вводе с клавиатуры символов 1, 2, … 7 на экран выводится название соответствующего дня недели. При вводе любого другого символа на экран выводится сообщение об ошибке.

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

В языке C имеется 4 класса памяти:

— extern (внешние переменные);

— auto (автоматические переменные);

— register (регистровые переменные);

— static (статические переменные);

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

Область видимости – это часть текста программы, в которой может быть использован данный объект. Объект считается видимым в блоке или в исходном файле, если в этом блоке или файле известны имя и тип объекта. Объект может быть видимым в пределах блока, текущего файла или во всех файлах, образующих программу.

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

Изменить время жизни переменной и область ее видимости можно, если указать для нее класс памяти. Все переменные, которые использовались до сих пор, были известны только содержащим их функциям. В C имеются возможности сделать ряд переменных известными сразу нескольким функциям и быстро обработать переменные путем помещения их значений в регистры и т. д. Эти и другие возможности реализуются при помощи присваивания переменным класса памяти.

Служебное слово, определяющее класс памяти, ставится в описаниях переменных перед служебным словом, задающим тип переменных:

extern char ch1;

Логическая структура памяти программы

Область памяти, в которой размещается программа, делится на разделы по назначению и способам управления данными:

  • сегмент кода используется для хранения кода программы – функций. Функции помещаются в сегмент кода на этапе компиляции программы и находятся там до завершения работы программы, поэтому все функции в C имеют глобальное время жизни и существуют в течение всего времени выполнения программы;
  • статическая память (сегмент данных) предназначена для хранения переменных в течение всего времени выполнения программы. Если для переменной в какой-либо момент работы программы выделена память в сегменте данных, она там будет находиться до завершения работы программы, даже если эта переменная больше не нужна. По умолчанию в сегменте данных хранятся глобальные переменные;
  • стек – это область памяти, в которой хранятся локальные переменные и параметры функций. При вызове функции ее параметры и локальные переменные помещаются в стек. Стек функционирует по принципу стакана – значение, помещенное в стек первым, оказывается на дне стека, в то время как последнее значение – на вершине стека. По завершении работы функции все данные, принадлежащие этой функции, удаляются из стека. Очистка стека начинается с вершины, т. е. со значений, помещенных в стек последними;
  • динамическая память (куча) позволяет программисту управлять процессом выделения памяти под переменные и освобождением памяти. Переменные, размещаемые в динамической памяти, называются динамическими переменными. О них речь пойдет позже, в динамическом распределении памяти.

Статьи к прочтению:

  • Локальная компьютерная сеть.
  • Локальная вычислительная сеть (лвс)

02 — Операционные системы. Управление памятью

Похожие статьи:

  • Структура программы на си. понятие о функциях Программа на языке Си представляет собой набор последовательно описанных функций (процедуры и подпрограммы в языке Си считаются частным случаем функций)….
  • Структура программы на языке pascal Введение Под языком программирования мы будем понимать совокупность средств и правил представления алгоритма в виде, приемлемом для компьютера….

Источник: csaa.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru