2013-11-27 13 views
8

Wie werden alle Optimierungen in GCC deaktiviert? Die Verwendung von -O0 funktioniert nicht, da es immer noch die Anweisungen optimiert, die keine Auswirkungen haben, oder irgendeinen Code, der nach einer Endlosschleife ohne Break-Anweisungen ist.So deaktivieren Sie alle Optimierungen in GCC

+0

keine es gibt alles Ich habe ist -g -g strict-dwarf -Wall – user2124324

+0

Ich glaube nicht, dass Sie alle Optimierungen ausschalten können. –

+0

Auch ohne Flags macht gcc einige grundlegende Optimierungen. Es macht Sinn, Anweisungen ohne Auswirkungen zu entfernen (Optimierung oder nicht). Nur neugierig: Warum willst du toten Code behalten? –

Antwort

7

Es gibt keine Möglichkeit, gcc nicht unerreichbaren Code und Anweisungen zu ignorieren, die keine Wirkung haben.

Sie können Code, der nicht erreichbar ist, mit volatilen Variablen erreichbar machen.

volatile bool always_true = true; 

if(always_true ) 
{ 
    //infinite loop 
    //return something 
} 

//Useless code 

in dem obigen Beispiel gcc wird nutzlos Code nicht optomize, weil es nicht weiß, kann es infact nutzlos ist

int a = 5; 
int b = 5; 
volatile int c = 9; 

c += 37; 
return a + b; 

In diesem Beispiel ganze Zahl c wird nicht optimiert werden, weil gcc tut kann nicht wissen, dass es totes Gewicht ist.

2

Sie müssen Ihren Code fast unmöglich machen, vom Compiler optimiert zu werden. Zum Beispiel:

  • Verwendung volatile Stichwort auf Variablen, die Sie nicht wünschen
  • optimiert werden sicherstellen, dass der Code Effekt hat, zum Beispiel: nicht nur nur den Variablenwert zu ändern, sondern auch den Wert ausdrucken oder speichern auf eine andere Variable oder Arithmetik auf die Variable und speichern sie in einer anderen variablen
  • reference/die Variable in andere Funktion ändern, um der Compiler stellen sie sicher, kann es nicht beurteilen, nicht in der Kompilierung verwendet
Verwandte Themen