Link Time Optimization (LTO) es una técnica de optimización de compiladores que difiere la fase final de optimización hasta el momento del enlace (link-time). En lugar de generar código máquina directamente para cada unidad de compilación (archivo .c/.cpp), el compilador genera una representación intermedia (Intermediate Representation, IR) para cada una. Durante el enlace, el linker, que ahora es 'aware' de LTO, combina todas estas IRs en una única representación global del programa. Esto permite al compilador realizar análisis y optimizaciones a nivel de todo el programa, como inlining de funciones a través de límites de unidades de compilación, eliminación de código muerto global (global dead code elimination) y propagación de constantes a través de todo el grafo de llamadas, que serían imposibles con optimizaciones a nivel de unidad de compilación.

LTO es ampliamente adoptado en la compilación de software de alto rendimiento y sistemas operativos. Compiladores como GCC (con la opción `-flto`) y Clang/LLVM (con la opción `-flto`) implementan esta funcionalidad. Es comúnmente utilizado en la construcción de kernels de sistemas operativos (como el Linux Kernel), navegadores web (ej. Chromium, Firefox), y grandes aplicaciones que buscan maximizar el rendimiento. Por ejemplo, en el desarrollo de videojuegos o motores gráficos, LTO puede reducir significativamente el tamaño del binario y mejorar la velocidad de ejecución al permitir que el compilador vea el panorama completo del código.

Para un arquitecto de sistemas, LTO es una herramienta estratégica para mejorar el rendimiento y reducir el tamaño de los binarios, especialmente en sistemas críticos donde cada ciclo de CPU y byte de memoria cuenta. Sin embargo, su uso introduce trade-offs importantes: el tiempo de compilación aumenta considerablemente debido a la complejidad del análisis global. Esto puede impactar los ciclos de desarrollo y CI/CD. Además, la depuración puede volverse más compleja, ya que las optimizaciones agresivas pueden reordenar o eliminar código de maneras que no se mapean directamente al código fuente original. Un arquitecto debe sopesar el beneficio de rendimiento frente al costo en tiempo de compilación y complejidad de depuración, decidiendo cuándo y dónde aplicar LTO, quizás reservándolo para builds de producción o componentes críticos de rendimiento.