-O3
tiene varias desventajas:
- En primer lugar, a menudo produce un código más lento que
-O2
o-Os
. A veces produce un código más largo debido al desenrollado del bucle que, de hecho, puede ser más lento debido a un peor rendimiento del código en caché. - Como se dijo, a veces produce un código incorrecto. Puede deberse a un error en la optimización o un error en el código (como ignorar el alias estricto). Como el código del kernel a veces es y a veces tiene que ser 'inteligente', diría que es posible que algún desarrollador del kernel haya cometido algún error. Experimenté varios problemas extraños, como fallas en las utilidades del espacio de usuario, cuando compilé el kernel con gcc 4.5, que en ese momento era estable. Todavía uso gcc 4.4 para kernel y varias utilidades de espacio de usuario seleccionadas debido a varios errores. Lo mismo puede aplicarse a
-O3
. - No creo que ofrezca muchos beneficios para el kernel de Linux. El núcleo no realiza cálculos pesados y, en algunos lugares, está optimizado con ensamblaje.
-O3
bandera no cambiar el costo del cambio de contexto o la velocidad de E/S. No creo que algo como <0.1% de aceleración del rendimiento general valga la pena.
Se usa en Gentoo y no noté nada inusual.
Tenga en cuenta que grandes partes de la cadena de herramientas (glibc en particular) no se compilan si cambia los niveles de optimización. El sistema de compilación está configurado para ignorar sus preferencias -O para estas secciones en la mayoría de las distribuciones sensatas.
En pocas palabras, ciertas características fundamentales de la biblioteca y del sistema operativo dependen de que el código realmente haga lo que dice, no lo que sería más rápido en muchos casos. -fgcse-after-reload en particular (habilitado por -O3) puede causar problemas extraños.