Definición
Un grafo cuyos nodos son subrutinas, funciones o métodos y cuyas aristas dirigidas indican que una rutina puede invocar a otra; las aristas suelen dibujarse del llamador al llamado y pueden anotarse con sitios de llamada o contextos de invocación.
Principio
Principio
Abstraer las relaciones de llamadas de un programa como un grafo para que análisis interprocedurales (alcanzabilidad a través de llamadas, detección de recursión, enumeración de cadenas de llamadas) y transformaciones (inlining, eliminación de código muerto, optimización global) puedan realizarse.
Demostración
Demostración
En un programa con funciones A, B y C donde A llama a B y B llama condicionalmente a C, el grafo de llamadas tiene una arista A→B y B→C; si hay recursión aparece un ciclo (p. ej., C→A), lo que informa sobre análisis de recursión y uso de pila.
Aplicación incorrecta
Aplicación incorrecta
Tratar un grafo de llamadas estático como un rastro de llamadas preciso en tiempo de ejecución — ignorando despacho dinámico, llamadas reflexivas o llamadas indirectas no resueltas — puede provocar suposiciones incorrectas sobre qué funciones se ejecutan y conducir a optimizaciones inseguras.
Consecuencia
Consecuencia
Construidos correctamente, los grafos de llamadas habilitan análisis interprocedurales como el refinamiento de resolución points-to, la propagación de resúmenes de efectos secundarios y la identificación de cadenas de llamadas calientes para optimización y perfilado.
Inversión
Inversión
Invertir la perspectiva a un grafo callee-a-caller o a un árbol de llamadas dinámico que registra las secuencias reales de invocación en tiempo de ejecución; la vista invertida enfatiza los sitios de uso y las pilas de llamadas reales más que las relaciones de llamada potenciales.
Límite
Límite
Distingue entre grafos de llamadas estáticos (conservadores, que pueden sobreaproximar) y dinámicos (observados, que pueden subaproximar). El grafo de llamadas estándar no captura por sí mismo valores de argumentos, temporalidad ni entrelazados debidos a concurrencia salvo que se amplíe.
Tensión semántica
Tensión semántica
Hay tensión entre el grafo de llamadas y otros grafos de dependencia (por ejemplo, grafo de dependencia de datos): los grafos de llamadas capturan la topología de invocación, no el flujo de datos o el flujo de control dentro de funciones; confundirlos distorsiona los objetivos analíticos.
Síntesis
Síntesis
Un grafo de llamadas es la abstracción a nivel de programa de quién puede invocar a quién: los nodos son rutinas y las aristas representan invocaciones potenciales u observadas, sirviendo como columna vertebral para razonamiento interprocedural y requiriendo claridad sobre estática frente a dinámica.