TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Генерация оверлейного кода 

             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+} обеспечивает использование одной версии  модуля  для  обоих
        случаев.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz