-O3
má několik nevýhod:
- Především často vytváří pomalejší kód než
-O2
nebo-Os
. Někdy vytváří delší kód kvůli rozbalování smyčky, která může být ve skutečnosti pomalejší kvůli horšímu výkonu mezipaměti kódu. - Jak bylo řečeno, někdy vytváří nesprávný kód. Může to být buď chyba v optimalizaci nebo chyba v kódu (jako ignorování striktního aliasingu). Protože kód jádra někdy je a někdy musí být „chytrý“, řekl bych, že je možné, že nějaký vývojář jádra udělal nějakou chybu. Když jsem kompiloval jádro s gcc 4.5, které bylo v tu chvíli stabilní, zažil jsem různé podivné problémy, jako je pád utilit v uživatelském prostoru. Stále používám gcc 4.4 pro jádro a několik vybraných nástrojů pro uživatelský prostor kvůli různým chybám. Totéž může platit pro
-O3
. - Nemyslím si, že by to linuxovému jádru přineslo mnoho výhod. Jádro neprovádí náročné výpočty a místy ano, je optimalizováno sestavením.
-O3
příznak nebude změnit náklady na přepínání kontextu nebo rychlost I/O. Nemyslím si, že něco jako <0,1% zrychlení celkového výkonu za to stojí.
Používá se v Gentoo a nevšiml jsem si ničeho neobvyklého.
Všimněte si, že velké části toolchainu (zejména glibc) se nezkompilují, pokud změníte úrovně optimalizace. Systém sestavení je nastaven tak, aby ignoroval vaše preference -O pro tyto sekce u většiny rozumných distribucí.
Jednoduše řečeno, určité základní funkce knihovny a operačního systému závisí na kódu, který skutečně dělá to, co říká, nikoli na tom, co by bylo v mnoha případech rychlejší. Zejména -fgcse-after-reload (povoleno -O3) může způsobit zvláštní problémy.