3.22. Модули

Поскольку целью настоящей главы является всестороннее рассмотрение эффективности программ, следует обсудить основные недостатки использования модулей, влияющие на эффективность. Я полагаю, однако, что множество преимуществ (удобочитаемость, модифицируемость, пригодность к отладке и тестированию) модульного подхода перевешивают эти недостатки.

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

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

Недостатком использования подпрограмм является то, что они могут стоить большого объема памяти. За подпрограммы нужно расплачиваться и памятью, и временем, так как при работе с ними необходимы команды связи, устанавливающие соответствие между вызывающей программой и подпрограммами. Для этого некоторые компиляторы КОБОЛа выделяют для каждой подпрограммы дополнительную память объемом 1К. Но память стоит расходовать только в том случае, если к подпрограмме обращаются более чем из одного места вызывающей программы.

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

Вы должны решить, что вас интересует в первую очередь — экономия времени или памяти, поскольку экономия одного ресурса влияет на использование другого. Если вас в первую очередь интересует экономия времени выполнения, то не следует использовать подпрограммы и программу надо писать последовательно. Но если экономия памяти стоит на первом месте, то повторно используемые части программ следует рассматривать как подпрограммы.

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

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

Поэтому, если переменной в подпрограмме всегда соответствует одна и та же переменная в основной памяти при каждом обращении к подпрограмме, то переменную следует расположить в общей области, которой присвоено имя. Однако если переменной в подпрограмме соответствуют различные переменные при разных обращениях к ней из вызывающей программы, то переменная должна входить в список аргументов. Если аргумент является константой, его можно объявить переменной и поместить в общую" область. Обычно все переменные стремятся поместить в список аргументов. Этого следует избегать, так как общая память гораздо более эффективна. При использовании общей памяти экономятся и память, и время.

Еще один способ сокращения числа элементов в списке параметров заключается в объединении нескольких параметров в одну область памяти. Например, модуль, создающий заголовки подпрограммы, может иметь некоторое количество данных, таких, как дата, счетчик страниц, метки заголовков, передаваемых как параметры. Если эти данные объединить в одну область, то можно сократить число параметров. Языки, подобные ПЛ/1 и КОБОЛу, имеют структуры данных, обеспечивающие объединение нескольких параметров.

3.21. Загрузочные модули || Оглавление || 3.23. Использование сведений о машине и компиляторе


Услуги