Курс Основы построения трансляторов


Связывание. Сравнительная характеристика языков программирования - часть 2


Язык Си характерен тем, что базовые типы данных в нем полностью совпадают с соответствующими формами представления данных в компьютере.

2.       Конкретная размерность переменной int определяется при реализации соответствующего компилятора.

3.       Имя a может быть определено в конструкции вида #define a 0x11FF. В этом случае имя (псевдо-переменная) связывается со своим значением на первой фазе трансляции - в препроцессоре.

4.       Если переменная определяется обычным способом в виде int a; то связывание переменной с соответствующим ей типом происходит во время трансляции (на фазе семантического анализа).

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

- при трансляции переменная привязывается к некоторому относительному адресу в сегменте данных объектного модуля (то есть ее размещение фиксируется только относительно  начала модуля)

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

- при загрузке программы в некоторую область памяти (например, в DOS или в режиме эмуляции DOS в WINDOWS) она может размещаться не с самого начала этой области. В этом случае осуществляется привязка адресов переменных, заданных в относительных адресах от начала программного модуля к  адресам памяти с учетом перемещения программного модуля (так называемый ПЕРЕМЕЩАЮЩИЙ ЗАГРУЗЧИК, которая имеет место для exe-файлов в DOS).

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


Начало  Назад  Вперед



Книжный магазин