2009-05-07 3 views
3

Verschiedene C/C++ Compiler haben #pragma s, um die Optimierung zu kontrollieren.Was ist die Methode zur Optimierung einzelner Funktionen in einer Datei in GCC 4.1.1?

Zum Beispiel:

Codewarrior

#pragma optimization_level 0 
void func_no_opt() 
{ 
    // Some Work - not optimized 
} 

#pragma optimization_level 3 
void func_full_opt() 
{ 
    // Some Work - optimized 
} 

MSVC

#pragma optimize("g", off) 
void func_no_opt() 
{ 
    // Some Work - not optimized 
} 

#pragma optimize("g", on) 
void func_full_opt() 
{ 
    // Some Work - optimized 
} 

#pragma optimize("", on) 
void func_default_opt() 
{ 
    // Some Work - default optimizations 
} 

Aus rein Performance-Gründen, ich habe ein paar Funktionen, die in allen Versionen optimiert werden müssen einschließlich Debug-Builds, die ansonsten nicht optimiert sind.

Gibt es einen Weg in GCC (speziell 4.1.1), etwas Ähnliches wie diese anderen Compiler zu tun? Leider wird GCC 4.4 nicht auf meiner Zielplattform (proprietäre Hardware) unterstützt, so dass ich das Optimierungsattribut nicht verwenden kann - d. H. __attribute__((optimize(...))).

Auch auf der Toolchain für diese Zielplattform gibt es ein Auto-Bulk-Build-Tool; Es ist also auch nicht möglich, die Funktionen in eine separate Datei zu zerlegen und die Optimierungsparameter zu ändern, da Dateien innerhalb eines Projekts automatisch kombiniert werden können, um die Kompilierungs- und Verbindungsgeschwindigkeiten zu erhöhen. Ich müsste eine separate Bibliothek nur dieser Funktionen erstellen und sie einbinden lassen, um die Absplitterungsmethode zu machen. Das könnte ein bisschen mehr Schmerz sein, als es wert wäre - besonders wenn es eine einfachere Methode gibt, dies zu erreichen.

Antwort

4

Sieht so aus, als ob die __attribute__((optimize(...))) die einzige Möglichkeit ist, die Optimierung pro Funktion in GCC zu steuern. Daher ist mit GCC 4.1.1 in der Tat die einzige Option, eine separate Bibliothek von zu optimierenden Funktionen aufzuteilen.

+0

Ugghh .. Ich hatte gehofft, es würde einen einfacheren Weg geben. Ich denke, ich werde einfach leiden müssen, bis sie GCC 4.4 unterstützen :-( – Adisak

2

mit GCC 4.4 nach oben, können Sie Optimierung Pragmas verwenden, wie ausführlich in http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html#Function-Specific-Option-Pragmas

#pragma GCC push_options 
#pragma GCC optimize ("-O0") 
int foo() { 
    return bar; 
} 
#pragma GCC pop_options 
+0

Ich habe festgestellt, dass diese Option in einer Klassenmethode nur funktioniert, wenn sich #pragma in der Klassendeklaration (.h-Datei) befindet eine Auswirkung auf die Methodendefinition (.cpp-Datei). – mgruber4

Verwandte Themen