Реклама:

Большинство команд не меняют поток управления. После выполнения одной команды вызывается и выполняется та команда, которая расположена в памяти следом за выполненной. После выполнения каждой команды счетчик команд увеличивается на число, соответствующее длине команды. Значение счетчика команд представляет собой линейную функцию от времени - это значение растет на среднюю длину команды за средний промежуток времени. Иными словами, процессор выполняет команды в том же порядке, в котором они расположены в программе, как показано на рис. 5.22, а. Если программа содержит переходы, соответствие между порядком расположения команд в памяти и порядком их выполнения нарушается. При наличии переходов значение счетчика команд перестает быть монотонно возрастающей функцией от времени, как показано на рис. 5.22, б. В результате последовательность выполнения команд из самой программы уже не видна.

Последовательный поток управления и переходы

Рис. 5.22. Значение счетчика команд как функция от времени (приближенно): без переходов (а); с переходами (б)

Если программист не знает, в какой последовательности процессор будет выполнять команды, это может привести к ошибкам. Такое наблюдение вызвало к жизни известную статью о необходимости избегать в программах оператора goto [55]. Эта статья привела к революции в программировании, одним из результатов которой стало появление операторов, позволяющих лучше структурировать поток управления, чем оператор goto. Естественно, подобные программы в конце концов все равно компилируются в программы уровня 2, содержащие многочисленные переходы, которых требует реализация операторов if, while и тому подобных высокоуровневых структур.

Поток управления || Оглавление || Процедуры