Frage

Ich habe ein lästiges Problem mit meinem iPhone App. Jedes Mal, wenn ich die Optimierungsstufe auf etwas anderes als „None“ gesetzt, erhalte ich Berechnungsfehler. Dies geschieht nur in beim Bau für das iPhone SDK (das iPhone Simulator ist immer gut).

ich habe nichts dagegen, Optimierungen im Release-Modus zu deaktivieren, aber die Anwendung ist ein klein bisschen zu langsam, wenn ich das tun.

Die Anwendung ist komplex, so ist es schwer, den Teil zu finden, die zu aggressiv optimiert ist.

Ich denke, dass das Problem auf der GCC Seite ist, da es Problem der Optimierung des Codes für die ARM-Architektur zu haben scheint.

Gibt es eine Möglichkeit, um nur Optimierungen zu deaktivieren nur für bestimmten Teil des Codes? Wie würden Sie mit dieser Art von Problem umgehen?

War es hilfreich?

Lösung

Ja, das ist durchaus möglich. GCC hat eine Attribut dass:

/* disable optimization for this function */
void my_function(void) __attribute__((optimize(0)));

void my_function(void) {
    /* ... */
}

Legt die Optimierungsstufe für die Funktion -O0. Sie können aktivieren / deaktivieren spezifische Optimierungen:

/* disable optimization for this function */
void my_function(void) __attribute__((optimize("no-inline-functions")));

void my_function(void) {
    /* ... */
}

Andere Tipps

Wenn Optimierung Ihres Programms Verhalten ändert, könnten Sie unwissentlich auf undefiniertes oder die Implementierung definiert Verhalten angewiesen sein. Es könnte sich lohnen, einen genaueren Blick auf Ihren Code mit einem Auge in Richtung Annahmen über Variablen Werte und Ordnungen der Evaluierung.

Bitte überprüfen Sie richtig returning Werte aus Funktionen. Nach meiner Erfahrung funktioniert das folgende nur manchmal:

int myFunc()
{
  x+7;
}

beachten Sie die absichtliche und unsichere Unterlassung des Rück Schlüsselwort

aufgrund des Registers wird in den Ausdruck Berechnung ist die gleiche wie die Rückkehr Register verwendet.

Wenn Optimierungen eingeschaltet sind, Nutzungsänderungen registrieren und die Funktion fehlschlägt zu tun, was Sie wollen.

Überprüfen Sie die Compiler-Warnungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top