глоссарий

Control-flow graph

Control-flow graph

Control-flow graph (граф потока управления) — это способ представить программу в виде схемы из блоков и стрелок. Каждый блок содержит последовательность действий, которые выполняются друг за другом без остановок, а стрелки показывают, куда можно перейти после блока. Такое представление не описывает, что именно делает программа, но зато чётко показывает все возможные порядки выполнения кода.

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

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

Прикладной пример. Разработчик написал функцию с проверкой возраста, но перепутал знак сравнения. Статический анализатор строит CFG и замечает, что блок с положительным ответом никогда не достигается — рёбра туда не ведут. Инструмент предупреждает: «Эта ветка недостижима», — и программист быстро находит ошибку.

Итог: граф потока управления — это компас для навигации по коду. Он превращает хаотичный текст в структурированную схему, на которой видны и узкие места, и логические аномалии. Без него современные компиляторы и диагностические инструменты работали бы вслепую, а поиск багов напоминал бы разговор вслепую.