 ##  [Grafo de Flujo de Control](/es/node/58769) 

 Definición

Un grafo dirigido que representa el posible orden de ejecución y la transferencia de control entre bloques básicos o sentencias en un programa; los nodos suelen representar bloques básicos y las aristas saltos, bifurcaciones y transiciones por caída.

 

 

 

 

 

 





## Principio

Principio

Modelar la ejecución del programa como transiciones entre regiones de control para que la alcanzabilidad, dominancia, liveness y otros análisis centrados en el control puedan formularse como problemas de grafo sobre nodos y aristas que representan el flujo del contador de programa.

 

 

 

 

 





## Demostración

Demostración

Una función con un if/else y un bucle se mapea a un CFG donde un nodo condicional tiene dos aristas salientes hacia los bloques 'then' y 'else'; el bucle introduce una arista de retroceso desde la cola del bucle al encabezado, haciendo el CFG cíclico.

 

 

 

 

## Aplicación incorrecta

Aplicación incorrecta

Usar un CFG para razonar sobre dependencias de datos (por ejemplo, asumir que definiciones de valores fluyen a lo largo de aristas del CFG) o asumir que la presencia de una arista implica que una transición en tiempo de ejecución siempre ocurrirá con la misma frecuencia: ambos conducen a optimizaciones o análisis incorrectos.

 

 

 

 

 





## Consecuencia

Consecuencia

El uso correcto permite optimizaciones como eliminación de código muerto, transformaciones de bucles, decisiones de inlining (cuando se combina con información interprocedural) y tareas de verificación como demostrar alcanzabilidad o ausencia de ciertos caminos de control.

 

 

 

 

## Inversión

Inversión

Tratar el programa puramente como flujo de datos (grafo computacional) donde las construcciones de control se codifican como transformaciones de datos; esta inversión sustituye aristas de control explícitas por guardas basadas en datos y puede ocultar propiedades centradas en el control.

 

 

 

 

 





## Límite

Límite

Se aplica por defecto a representaciones intraprocedurales; el flujo de control interprocedural requiere extensión (aristas de llamada/retorno, CFG interprocedural). No codifica efectos secundarios, entrelazados de concurrencia ni temporización precisa salvo que se amplíe.

 

 

 

 

 





## Tensión semántica

Tensión semántica

Existe tensión entre el CFG y los grafos computacionales/de flujo de datos: el CFG enfatiza los posibles traslados del contador de programa (control), mientras que los grafos de datos enfatizan la propagación de valores; confundirlos lleva a análisis inapropiados.

 

 

 

 

 





## Síntesis

Síntesis

Un grafo de flujo de control es la abstracción del programa que hace explícitas las transiciones posibles entre regiones del programa como aristas dirigidas; es la estructura fundamental para análisis y transformaciones que dependen de la forma del control más que del simple movimiento de datos.