{img1} |
symantec antivirus |
|
При написании немодульной программы
программист может потратить несколько часов, пытаясь открыть: ис-
пользуется ли регистр, или хуже того, верно ли то, что он должен
использоваться. При модульном программировании программист не ин-
тересуется тем, какие регистры он использует в настоящий момент,
пока вызываемый модуль копирует его параметры в стек и сохраняет
весь набор регистров на входе. |
програмное обеспечение |
|
{img2} |
англо русский словарь |
|
Эти особенности создают возмож-
ность сначала использовать приемы модульного программирования для
повышения скорости кодирования и затем переработки программы для
удаления "узких" мест.
Для областей, чувствительных к скорости работы, лучшей реко-
мендацией является выбор основной ветви программы. Если модуль
упоминается только в чувствительной к скорости работы программной
секции, то он может быть включен в "ветвь" внутри вызывающего
модуля. |
winrar |
|
{img3} |
системы управления базой данных |
|
Если другие секции используют модуль, то они могут быть
скопированы в вызывающий модуль в необходимое место. В связи с
тем, что основной вызывающий модуль станет большим, необходимо
вставить комментарии в его тело, помечающие включаемый модуль как
блок его владельца. |
системы управления базой данных |
|
|
win zip, nod32, доктор веб, сетевой экран, прокси сервера, .
avast 4
|
Этот факт существенно повышает "понимаемость" програм-
мы, поскольку читатель может познакомиться с ее основным потоком
и функционированием после прочтения только одной-двух страниц
программного кода. Однако эта особенность может также иметь и
недостатки. Одна из многих верхних статистических оценок програм-
мирования говорит о том, что 90% времени выполнения типовых прог-
рамм расходуется в 10 % кода программы. При этом подразумевается,
что если эти 10 % содержат большое количество цепочечных вызовов
процедур, то суммарное время, затрачиваемое на управление выпол-
- 2-4 -
нением программы, может стать непреодолимым препятствием на пути
использования этого подхода.
Прежде чем отказаться от модульности проектируемой программы,
проверьте, что скрывается под зависимостью программы от времени.
Во-первых, большинство программ затрачивают большую часть времени
выполнения на ожидание ввода информации с клавиатуры. После нажа-
тия клавиши требуемые функции, с точки зрения выполнения длитель-
ного процесса, обычно не расходуют время. Различие между 100 мик-
росекунд и 100 миллисекунд для среднего пользователя неразличимо.
Противоположным для некоторых мнением является то, что дейс-
твующий механизм пары CALL - RET не перекрывает потребляемое вре-
мя. По сравнению с инструкциями перехода инструкция CALL выполня-
ется на 30-50% дольше, а RET в среднем длиннее на 1 цикл. Только
когда во внимание принимаются накладные расходы передачи парамет-
ров, сохранения регистров и т.д., называемые служебными расхода-
ми, модульные программы начинают выглядеть медленнее по срав-
нению с немодульными программами. В дополнение к тому, что модули
модульных программ обычно являются более общими, чем их неструк-
турированные дубликаты, модули модульных программ могут использо-
вать ссылки на память или стек с большей частотой. Дополнительное
время, расходуемое на вычисление действительного адреса в теле
модуля, может привести к замедлению выполнения конкретного моду-
ля, чем узко закодированная конкретная программа.
Преимущества служебных программ и программ общего назначения
заключаются в том, что модуль может быть использован виртуально в
некотором месте программы.
|
|
|