Практические различия между графиком потока управления и графиком вызова (потока?)

В Википедии есть определение графа потока управления. Я также слышал терминологию, относящуюся к "графу вызовов (потока?)", Но не могу найти никаких соответствующих ресурсов. Какая связь между ними?

1 ответ

Решение

Википедия определяет граф вызовов как представление отношений вызова между подпрограммами в программе. В графе вызовов, ребро между двумя узлами f а также g:

      f --> g

представляет собой тот факт, что подпрограмма f вызывает подпрограмму g, График вызовов дает межпроцедурное представление о программе.

График потока управления (CFG) обеспечивает более тонкие "детали" в структуре программы в целом и подпрограмм в частности. Например, CFG подпрограммы f сделает явными все пути, которые вызваны условной ветвью:

                             / branch1 \
    begin --> condition -->             --> codeblock --> g --> end
                             \ branch2 /

Этот вид CFG используется для создания внутрипроцедурного представления подпрограммы.

Графы вызовов (CG) и графы потоков управления (CFG) состоят из узлов и ребер. CG является межпроцедурным, узлы представляют подпрограммы (методы, функции, ...), в то время как ребра представляют отношения, вызываемые вызывающим абонентом, между двумя подпрограммами (например, A->B, "A" - это подпрограмма вызывающего абонента, а "B" - это называется подпрограммой). CFG является внутрипроцедурным, узлы представляют собой операторы программы, в том числе вызываемые подпрограммы, а также условные выражения, а ребра представляют собой поток программы. Когда CG и CFG объединяются, это называется межпроцедурным графом потока управления (ICFG). Генерация CFG более ресурсоемкая, чем CG, но более подробная.

Другие вопросы по тегам