28. Локальное и динамическое распределение памяти. Область видимости переменных
Распределение памяти - выделение мест в памяти ЦВМ, в которых локализуются информационные объекты, участвующие в вычислительном процессе, а так же само соответствие между этими объектами и отведенными для них местами в памяти. Распределение памяти, для которого данная последовательность состоит из одного отображения (множества эквивалентных отображений), называется статическим(локальным). Динамическим называется такое распределение памяти, при котором каждое отображение выбирается непосредственно в ходе вычислительного процесса, исходя из предыдущего отображения.
Локальное распределение памяти подразумевает, что место для переменных и объектов выделяется на стеке программы. Стек представляет собой рабочую область памяти, резервируемую программой при ее загрузке. К его плюсам можно отнести то обстоятельство, что память из стека выделяется очень быстро. С другой стороны, сам стек имеет фиксированный размер и не может быть изменен во время выполнения программы. Для переменных встроенных типов и небольших массивов локальное распределение памяти является идеальным. Динамическое распределение памяти означает, что память под объект выделяется из кучи. Под кучей в случае Windows подразумевается вся виртуальная память вашего компьютера. К положительным моментам такого подхода можно отнести наличие практически неограниченной памяти, доступной для ваших приложений. С другой стороны, оно требует известных дополнительных затрат, что делает память несколько более медленной.
Областью данных является ряд последовательных ячеек – блок оперативной памяти, - выделенный для данных, каким-то образом объединенных логически. Области данных делятся на два класса - статический и динамический.
Переменные, память, под которые распределяется автоматически, называются статическими. Переменные, созданием и уничтожением которых явно может управлять программист, называются динамическими переменными. Поэтому единственным средством доступа к динамическим переменным является указатель на место их текущего расположения в памяти.
Для распределения памяти под локальные переменные отводится специальный сегмент оперативной памяти (сегмент стека). Аналогично, образование динамических переменных реализуется в другой области памяти, которая существует отдельно от стекового сегмента и называется кучей (heap) или динамической областью памяти.
Программисты применяют термин область видимости, когда хотят сказать о возможности использования переменной из одной части программы в другой ее части.
В зависимости от того, где объявлена переменная, её область видимости ограничивается либо уровнем процедуры (локальным), либо уровнем модуля. Локальные переменные существуют только во время вызова процедуры, где они объявлены. Если переменная объявлена с использованием ключевого слова Public, то она является глобальной и доступна из всех форм и модулей проекта.