Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Директивы компилятора. Директивы-параметры 
:(
    Опции темы
Fedor
Дата 20.4.2005, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Параметры
 ----------
Директивы параметров определяют параметры, которые влияют на компиляцию программы.

 Директива           Значение
 $C Атрибут          Атрибут сегмента кода
 $D Текст            Описание
 $I ИмяФайла         Файл для включения
 $G ИмяМодуля        Группа модулей в сегменте
 $L ИмяФайла         Компоновать объектный файл
 $M Стек, Куча       Размеры распределения памяти
 $O ИмяМодуля        Имя оверлейного модуля
 $R ИмяФайла         Файл с ресурсами
 $S РазмерСегмента   Размер сегмента

Между именем директивы и параметрами должен находиться хотя бы один пробел.
Например:

 {$I TYPES.INC}
 {$O MYUNIT}

$C: Атрибут сегмента кода
 --------------------------
Управляет атрибутами сегмента кода.

 Синтаксис:             {$C атрибут атрибут}
 Значение по умолчанию: {$C MOVEABLE DEMANDLOAD DISCARDABLE}
 Тип:                   Глобальная

 Режим:                 Windows, Protected

 Замечания:
Каждый сегмент кода в приложении или библиотеке имеет набор атрибутов, которые определяют его поведение, когда он загружается в память.
Директива $C влияет только на сегмент кода модуля, программы или библиотеки в которых она помещена.
Атрибуты сегмента кода разбиты на группы по два в каждой. Каждая опция имеет противоположную ей опцию:
 Опция       Значение

 MOVEABLE    Система может изменять расположение сегмента кода в памяти.
 FIXED       Система не может изменять расположение сегмента кода в памяти.

 PRELOAD     Сегмент кода загружается при запуске программы.
 DEMANDLOAD  Сегмент кода загружается только при необходимости.

 PERMAMENT   Сегмент кода остается в памяти всегда, после загрузки.
 DISCARDABLE Сегмент кода может быть выгружен из памяти, если он больше не нужен.

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

Например запись
 {$C FIXED MOVEABLE DISCARDABLE}
создаст сегмент кода с атрибутами MOVEABLE и DISCARDABLE.

$D: Описание
-------------
Вставляет указанный текст в раздел описания в заголовке EXE или DLL файлов.

 Синтаксис: {$D Текст}
 Тип:       Глобальная

 Режим:     Windows, Protected

$I: Файл для включения
-----------------------
Указывает компилятору включить указанный файл в компиляцию.

   Синтаксис: {$I Имя_файла}
   Тип:       Локальная

 Замечания:
Заданное по умолчанию расширение для файла - PAS

Если Имя_файла не определяет каталог, то IDE ищет
 - Сначала в текущем каталоге
 - Затем в каталогах, определенных в строке ввода Options|Directories|Include directories (или в каталогах, которые вы    определили в опции /I в командной строке при запуске TPC)
Включаемый файл вставляется в компилируемый текст сразу после директивы $I. Вы можете использовать 15 уровней вложенных файлов.
ВНИМАНИЕ: Файл для включения не может быть определен в середине операторной части.
Все операторы между словами Begin и End операторной части должны находиться в одном и том же исходном файле.

Директива $G: Группа модулей в сегменте
----------------------------------------
Определяет группу модулей, которые компоновщик должен поместить в один и тот же сегмент.

   Синтаксис: {$G ИмяМодуля, ИмяМодуля ...}
   Тип:       Локальная

 Режим:       Windows, Protected

 Замечания:
Директива $G определяет группу модулей, которые компоновщик должен поместить в один и тот же сегмент. Группировка модулей в одном и том же сегменте гарантирует, что модули загружаются и выгружаются из памяти в одно и то же время. Директива $G используется прежде всего для группировки модулей, содержащих неиспользуемые данной программой части кода.
Каждая директива $G определяет группу модулей. Директивы $G допустимы только в программе или библиотеке, и должны находиться после зарезервированного слова Uses. Компилятор сообщает об ошибке, если вы пытаетесь добавить модуль в более, чем одну группу. В дополнение к любым группам, созданным с помощью директивы $G, компилятор поддерживает заданную по умолчанию группу, которая включает все модули, сгруппированные неявно.
Компоновщик минимизирует число сегментов кода в исполняемом файле, объединяя все модули, которые принадлежат одной и той же группе. Два или более модуля помещаются в один и тот же сегмент кода, если они принадлежат одной группе и имеют одни и те же атрибуты сегмента кода, и если их общий размер не превышает выбранный размер сегмента.
Компоновщик никогда не будет помещать модули, принадлежащие разным группам, в один и тот же сегмент кода.

$L: Компоновать объектный файл
-------------------------------
Указывает компилятору компоновать заданный файл вместе с программой или модулем.

   Синтаксис: {$L Имя_файла}
   Тип:       Локальная

 Замечания:
Директива $L используется для компоновки с основной программой кода, написанного на ассемблере для подпрограмм, объявленных внешними.

Указанный файл должен быть переместимым объектным файлом Intel (файл *.OBJ).
Заданное по умолчанию расширение для файла - OBJ
Если Имя_файла не определяет каталог, то IDE ищет
 - Сначала в текущем каталоге
 - Затем в каталогах, определенных в строке ввода Options|Directories|Object directories.

$M: Размеры распределения памяти
 ---------------------------------
Определяет параметры распределения памяти.

 Синтаксис:             {$M размер_стека, размер_кучи}
 Значения по умолчанию: {$M размер_стека, размер кучи} (Windows)
                        {$M размер_стека} (Защищенный режим DOS)
 {$M размер_стека, начало_кучи, конец_кучи} (Реальный режим DOS)

 Тип:                   Глобальная
 Команда меню:          Options|Compiler|Memory sizes

Директива $M определяет параметры распределения памяти для приложения или библиотеки. Параметр "размер_стека" должен быть целым числом в диапазоне от 1024 до 65520, что определяет размер сегмента стека.
Для реального режима DOS, параметры "начало_кучи" и "конец_кучи" определяют минимальный и максимальный размеры кучи, соответственно. Параметр "начало_кучи" должен быть в диапазоне от 0 до 655360, а параметр "конец_кучи" должен быть в диапазоне от "начало_кучи" до 655360.
Для Windows, параметр "размер_кучи" определяет размер локальной области кучи в сегменте данных. Параметр "размер_кучи" должен быть целым числом в диапазоне от 0 до 65520.
ВНИМАНИЕ: Директива $M не дает эффекта, когда используется в модуле. Параметр "размер_стека" игнорируется в библиотеке (библиотека всегда использует стек приложения, которое ее вызывает).

$O: Имя оверлейного модуля
 ---------------------------
Записывает модуль в файл оверлеев.

 Синтаксис: {$O Имя_модуля}
 Тип:       Локальная

 Режим:     Real

Когда вы компилируете программу, директива {$O Имя_модуля} определяет, какой из модулей, используемых программой должен быть помещен в OVR файл вместо EXE файла.
Директивы {$O Имя_модуля} должны находиться после раздела Uses программы.
Директива {$O Имя_модуля} не дает эффекта, если используется в модуле.
Компилятор сообщает об ошибке, если вы пытаетесь записать в оверлейный файл модуль, который не компилировался в режиме {$O+}.
Любой модуль, описанный в директиве {$O Имя_модуля}, должен компилироваться со включенной опцией Overlays allowed (в диалоговом окне Options|Compiler).

$R: Файл с ресурсами
 ---------------------
Определяет имя ресурсного файла, который будет включен в приложение или библиотеку.

 Синтаксис: {$R Имя_файла}
 Тип:       Локальная

 Режим:     Windows, Protected

 Замечания:
Заданное по умолчанию расширение для файла - RES. Это должен быть файл ресурсов Windows.
Если Имя_файла не определяет каталог, то компилятор ищет
 - Сначала в текущем каталоге
 - Затем в каталогах, определенных в строке ввода Options|Directories|Resource directories
Когда используется в модуле, ресурсный файл просто переписывается в полученный файл модуля. Никакая проверка, гарантирующая что файл существует на данном этапе, не производится.
При компоновке приложения или библиотеки, обрабатываются файлы ресурсов, определенные во всех модулях и в самой программе или библиотеке, и каждый ресурс каждого ресурсного файла копируется в созданный EXE или DLL файлы.

Директива $S: Установка размера сегмента
-----------------------------------------
Определяет размер сегмента кода для сгруппированных модулей.

   Синтаксис:             {$S РазмерСегмента}
   Значение по умолчанию: {$S 16384}
   Тип:                   Глобальная

 Режим:                   Windows, Protected

 Замечания:
Директива $S допустима только в основной программе или библиотеке. Директива определяет размер сегментов кода для сгруппированных модулей. Выбранный размер должен находиться в диапазоне от 0 до 65535. Модули, размер которых превышает выбранный размер, помещаются в отдельные сегменты кода.
При группировке модулей, компоновщик помещает модули с одними и теми же атрибутами сегмента кода в один и тот же сегмент кода, до достижения определенного размера. Это ограничение действует также и на группы, определенные с помощью директивы $G.
Директива $S никогда не производит предупреждений или сообщений об ошибках. Если модуль не может быть записан в сегмент кода с другими модулями, он автоматически записывается в отдельный сегмент.
Установка размера сегмента в 0 гарантирует, что каждый модуль будет записан в отдельный сегмент кода, что было установкой по умолчанию в предыдущих версиях компилятора.


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.