Pregunta ¿Hay alguna razón para no usar la optimización de tiempo de enlace?


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?


32
2018-05-19 11:24


origen


Respuestas:


Supongo que por "software de producción" se refiere al software que envía a los clientes / entra en producción. Las respuestas en ¿Por qué no usar siempre la optimización del compilador? (amablemente señaló por Mankarse) se aplican 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 puedo pensar es que la optimización del tiempo de enlace mayo introducir errores sutiles, ver 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).


21
2018-05-19 12:08



Esta reciente pregunta 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 se han utilizado unidades de compilación separadas para tratar de preservar el orden relativo de las instrucciones instrumentadas e instrumentales, entonces LTO tiene buenas posibilidades de destruir el orden necesario.

Dije que era específico.


4
2018-06-14 09:53