TURBO PASCAL |
Новости
|
Генерация оверлейного кодаBorland Pascal допускает использование модуля в качестве оверлейного только в том случае, если он генерировался с директи- вой {$O+}. Когда задана эта директива, генератор выполняемого ко- да, при передаче строки из одной оверлейной процедуры в другую и задании постоянных параметров, предпринимает особые меры предос- торожности. Например, если модуль UnitA содержит процедуру со следующим заголовком: procedure WriteStr(s: string); и модуль UnitB содержит оператор: WriteStr('Hello word...'); то Borland Pascal помещает строковую константу 'Hello word...' в сегмент кода модуля UnitB и передает указатель на него процедуре WriteStr. Однако, если оба модуля являются оверлейными, то это работать не будет, поскольку при обращении в WriteStr сегмент ко- да модуля UnitB может быть перекрыт модулем UnitA, и ссылка на строку окажется недопустимой. Для того, чтобы избежать эти проб- лемы, используется директива {$O+}. Каждый раз, когда Турбо Пас- каль встречает обращение из одного модуля, скомпилированного с директивой {$O+}, к другому модулю, скомпилированному с директи- вой {$O+}, компилятор перед передачей ссылок на них обеспечивает временное копирование всех размещенных в сегменте кода констант в стек. Указание в модуле директивы {$O+} не обязывает вас использо- вать этот модуль как оверлейный. Она просто указывает Borland Pascal на необходимость обеспечения, если это нужно, использова- ния данного модуля в качестве оверлейного. Если вы разрабатываете модули, которые планируете использовать как в оверлейных, так и в неоверлейных прикладных программах, то компиляция их с директивой {$O+} обеспечивает использование одной версии модуля для обоих случаев. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |