Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции (Ведищев) + шпоры к экзамену / лекции по программированию за 1 курс.doc
Скачиваний:
176
Добавлен:
20.06.2014
Размер:
805.38 Кб
Скачать

Именованные константы. Макроопределения.

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

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

Endif отменяет текущее определение макроконстанты. Замены функции макровызовом повышает скорость вызова функции за счет исключения последующих вызовов, увеличивает размер исходного текста программы.

Существует ряд предопределенных идентификаторов, называемых псевдопеременными: № текущей обрабатываемой строки, время начала компиляции и дата компиляции данного файла.

Директивы управления нумерации строк.

После этого препроцессор присваивает строке № . Данная директива возникла при создании С.

Директива обработки ошибок.

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

Указания компилятору. Синтаксис.

Перекомпиляция файла с заготовкой.

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

В результате компилирования программы тратится время на перекомпилирование основного модуля программы, а также блоки объявлений используемых функций. Когда в компилятор С была включена возможность компилирования С++, файл заголовков функций стал занимать чрезвычайно больший объем по сравнению с программой пользователя. Тогда была введена директива pragma, что позволяет отличить подключаемые файлы как предварительно компилируемые. При 1-ой компиляции будет создан псевдообъектный файл, в который будут записаны заголовки функций. При повторной компиляции он будет сразу считан.

Псевдопеременные.

Каждая такая переменная начинается и заканчивается двойными символами подчеркивания и записывается заглавными буквами.

__LINE__содержит номер текущей строки

__FILE__имя компилируемого исходного файла

__DATE__дата начала компиляции

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

Модели памяти.

Модель памяти определяется при компиляции программистом, либо в среде разработке в соответствующем пункте меню, либо в командной строке с помощью опции – Мх (х – модель памяти: t – крошечная модель: s –малая модель: m –средняя модель).

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

t –модель:

память, занимаемая программой имеет объем не более 64 кило байт. Выполнение ограничения в 64 кило байта позволяет исполняемый модуль преобразовать в com-формат.

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

s –модель:

Размер кода и размер данных по 64 кило байта. Общий размер не более 128 кило байт.

Использование h-модели памяти приводит увеличению времени доступа к данным, однако позволяет использовать все доступное пространство оперативной памяти.

Использование в современных ОС так называемой виртуальной памяти позволяет ввести так называемую модель памяти (тип функции). При этом адресация осуществляется по 32-битному адресу, который интерпретируется без дополнительных преобразований.

32-битный fare- адрес вне плоской модели памяти преобразуется в 20-битный адрес, что позволяет организовать 1 Мега байтное адресное пространство, разделенное на 64 К - пересекающихся сегментов.

Пересечение сегментов приводит к тому, что массив не может превышать по размеру 64 кило байта. Использование дополнительных действий в h-модели позволяет объявлять массивы, размером больше 64 Кбайт, но его элементы не могут превышать этот предел. Плоская 32-битная адресация лишена всех этих недостатков.

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

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

Если же размещение данных в ОЗУ невозможно, то то ОС размещает данные на ВЗУ, делает это прозрачным для программы.

В результате в распоряжении программы имеется вся доступная память без разделения на ОЗУ и ВЗУ, в пределах допустимого при 32-битной адресации 4 Гбайтного пространства.

Виртуальный (действительный, реально существующий).

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

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

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

Пример: виртуальная память в ОС WINDOWS. Пользователю доступно до 4 Гбайт. Это реализуется с помощью прозрачного механизма swaping (с помощью файла-подкачки). Многомерный массив виртуален, но прозрачные механизмы индексации позволяют рассматривать двумерный массив как матрицу.