![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Внутреннее представление Си-программы
Система представлений о внутренней среде исполнения Си-программы (имеется в виду «классический» Си, а не Си++) максимально приближена к «реальностям», с которыми сталкивается программа, работающая непосредственно на уровне архитектуры, и не имеющая под собой «прослойки» программного обеспечения. К этому языку применим термин «машинно-независимый ассемблер», а основные понятий его семантики прямо проецируются на соответствующие элементы архитектуры, в том числе: · «чистота» программного кода. При отсутствии обращений к внешним функциям компилятор генерирует программный код, представляющий собой «вещь в себе». Кроме того, строго оговорены неявные преобразования, сопровождающиеся «вставками» постороннего кода; · соответствие базовых типов данных и форматов представления данных в процессоре. Целые типы ассоциируются с машинными словами различной размерности, поддерживается набор операций арифметических, логических и поразрядных преобразований; · работы с памятью на низком уровне. Тип указателя однозначно интерпретируется как адрес в непрерывном адресном пространстве. На низком уровне указатели различных типов приводятся друг к другу и к целому типу, передача указателя от одной программной компоненты к другой обеспечивает доступ к данным из любой точки программы; · все типы данных имеют фиксированную размерность, которая может быть получена программой с помощью операции sizeof. Программы может реализовать любую систему распределения памяти и свободно переходить от одного представления данных к другому в одной и той же области памяти; · максимально используется статическое связывание имен переменных и функций с адресами памяти, большинство имен получает фиксированные адреса или смещения (например, относительно текущего фрейма стека); · структуры данных переменной размерности создаются на основе системы динамического распределения памяти, которое фактически реализовано вне языка (библиотека функций), использует указатели и средства адресной арифметики; Перечисленные свойства позволяют говорить о Си как единственной альтернативе Ассемблеру при программировании встроенных систем, работающих на «голой» архитектуре, внутренних кодов ядра операционных систем, программ с повышенными требованиями к быстродействию и использованию памяти. В качестве примера рассмотрим механизм вызова функций, использующий простой способ передачи параметров через стек и установление из соответствия посредством объявлений (передаче вызывающей программе заголовка или прототипа функции, если вызываемая функция находится вне зоны «видимости» программы).
|