Четвертый BORLAND С++ и его окружение

       

Разработка программ с оверлеями


Этот раздел содержит важные сведения о разработке программ с

оверлеями с хорошими характеристиками.

При компиляции оверлейного модуля вы должны использовать

большую модель памяти (medium, large или huge). При всяком вызове

функции из оверлейного модуля вы обязаны гарантировать, что все

активные в текущий момент функции являются дальними.

Вы обязаны компилировать все оверлейные модули с параметром

-Y, что обеспечит оверлейную структуру генерируемого кода.

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

Размер оверлейного буфера по умолчанию в два раза превышает

размер самого большого оверлея. Для большинства прикладных программ такое умолчание вполне адекватно. Однако, представим себе

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

размер этих модулей превышает размер оверлейного буфера, то если



модули часто вызывают друг друга, это приведет к интенсивному

свопингу.

Очевидно, что решение здесь заключается в увеличении размера

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

можно сделать, установив через глобальную переменную _ovrbuffer

требуемый размер в параграфах. Например, для установки размера

оверлейного буфера равным 128К, включите в ваш код следующий оператор:

unsigned _ovrbuffer = 0x2000;

Общей формулы для определения идеального размера оверлейного

буфера не существует.

Не создавайте оверлейных модулей, содержащих обработчики

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

Программа управления оверлеями Borland C++ полностью поддерживает передачу оверлейных функций как аргументов, присвоение и

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



Содержание раздела