Björn König
Well-Known Member
Ich stimme dabei dir zu, dass die meisten CPU-Optimierungen den Code nicht vergrößern, allerdings stimmt es nicht, dass bei -O2 und -O3 die Umwandlung von Schleifen in Code für die Aufblähung verantwortlich sind. Das "unroll-loops" wird nicht automatisch durchgeführt. Vielmehr ist "reorder-blocks" dafür zum großen Teil verantwortlich. Zur Veranschaulichung habe ich mal gzip mit verschiedenen Schalterkombinationen kompiliert:free said:CPU-Optimierungen machen im schlimmsten Fall nichts, im besten für eine Funktion, die vorher 5 Befehle gebraucht hat nun einen eigenen Befehl -> Der Code wird kleiner und meistens auch schneller!!
GRÖSSER wird er nur, wenn man die (ohnehin bösen) -O2, -O3 Schalter benutzt, da er hier z.B. Schleifen in normalen Code umwandelt, der dann 20x untereinander steht, um die Sprünge/Vergleiche zu sparen.
Code:
70689 Bytes -O0
63847 Bytes -O1
63029 Bytes -O2
60437 Bytes -O2 -fno-reorder-blocks
69575 Bytes -O3
66055 Bytes -O3 -fno-reorder-blocks
97351 Bytes -O3 -funroll-loops
57611 Bytes -Os
Björn