c++ - ¿Hay alguna razón para no usar la optimización de tiempo de enlace?
performance compilation (2)
GCC, MSVC, LLVM y probablemente otras cadenas de herramientas tienen soporte para optimizar el tiempo de enlace (todo el programa) para permitir la optimización de llamadas entre las unidades de compilación.
¿Hay alguna razón para no habilitar esta opción al compilar software de producción?
Supongo que por "software de producción" te refieres al software que envías a los clientes / entra en producción. Las respuestas en ¿Por qué no siempre se usa la optimización del compilador? (señalado amablemente por Mankarse ) se aplica principalmente a situaciones en las que desea depurar su código (por lo que el software todavía está en la fase de desarrollo, no en producción).
La única buena razón válida que se me ocurre es que la optimización del tiempo de enlace puede introducir errores sutiles, consulte Optimización del tiempo de enlace para el kernel . Suponiendo que tiene las pruebas adecuadas para verificar la corrección de su software que está a punto de enviar, no veo ninguna razón para no usar LTO por defecto. (LTO se está haciendo más maduro con el tiempo, así que esperemos que esos errores sutiles sean cada vez menos frecuentes).
Esta pregunta reciente plantea otro caso posible (pero bastante específico) en el que LTO puede tener efectos no deseados: si el código en cuestión está instrumentado para el tiempo, y unidades de compilación separadas se han utilizado para tratar de preservar el orden relativo de las declaraciones instrumentadas y instrumentales , entonces LTO tiene buenas posibilidades de destruir el orden necesario.
Dije que era específico.