www whirlpool washing quiet partner machine español dishwasher c++ linux g++ x86-64 ld

c++ - whirlpool - g++ Indicadores de optimización:-fuse-linker-plugin vs-fwhole-program



whirlpool washing machine repair manual pdf (1)

Estoy leyendo: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

Primero sugiere: En combinación con -fl para usar esta opción ( -fwhole-program ) no se debe usar. En su lugar, confiar en un complemento de vinculador debería proporcionar información más segura y precisa.

Y luego, sugiere: si el programa no requiere que se exporten símbolos, es posible combinar -flto y -todo-programa para permitir que los optimizadores interprocedenciales utilicen suposiciones más agresivas que pueden conducir a mejores oportunidades de optimización. El uso de -fwhole-program no es necesario cuando el complemento del vinculador está activo (consulte -fuse-linker-plugin ).

¿Significa que, en teoría, usar -fuse-linker-plugin with -flto siempre obtiene un ejecutable mejor optimizado que usar -fwhole-program with -flto ?

Intenté usar ld para enlazar con -fuse-linker-plugin y -fwhole-program por separado, y los tamaños de los ejecutables al menos son diferentes.

Gracias por adelantado.

PS Estoy usando gcc 4.6.2, y ld 2.21.53.0.1 en CentOS 6.


Estas diferencias son sutiles. Primero, entienda lo que realmente hace flfl . Básicamente, crea una salida que puede optimizarse más tarde (en "tiempo de enlace").

Lo que hace -fwhole-program asume " que la unidad de compilación actual representa a todo el programa que se está compilando " independientemente de si ese es realmente el caso. Por lo tanto, GCC asumirá que conoce todos los lugares que llaman a una función en particular. Como dice, podría usar optimizadores inter-procedimientos más agresivos. Te lo explicaré en un momento.

Por último, lo que hace -fuse-linker-plugin es en realidad realizar las optimizaciones en el tiempo de enlace que normalmente se realizaría al realizar cada unidad de compilación. Entonces, este está diseñado para emparejarse con -flto porque -flto significa guardar suficiente información para hacer optimizaciones más tarde y -fuse-linker-plugin significa hacer esas optimizaciones.

Entonces, ¿en qué se diferencian? Bueno, como sugiere GCC doc, no hay ninguna ventaja en principio de usar -fwhole-program porque esa opción asume algo que luego debe asegurarse de que sea verdad. Para romperlo, simplemente defina una función en un archivo .cpp y úsela en otro. Obtendrá un error de vinculador.

¿Hay alguna ventaja en el programa completo ? Bueno, si solo tienes una unidad de compilación, entonces puedes usarla, pero honestamente, no será mejor. Pude obtener ejecutables de diferentes tamaños utilizando programas equivalentes, pero al verificar el código de máquina generado real, eran idénticos. De hecho, las únicas diferencias que vi fueron que los números de línea con información de depuración eran diferentes.