double arrow

Распределение памяти, виды переменных


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

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

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

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

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




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

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







Сейчас читают про: