2009-05-07 7 views
3

Différents compilateurs C/C++ ont #pragma s pour contrôler l'optimisation.Quelle est la méthode d'optimisation des fonctions individuelles dans un fichier dans GCC 4.1.1?

Par exemple:

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 
} 

Pour des raisons purement de performance, j'ai deux ou trois fonctions qui doivent être optimisés dans toutes les versions , y compris les versions de débogage qui ne sont pas optimisées

Est-il possible dans GCC (en particulier 4.1.1) de faire quelque chose de semblable à ces autres compilateurs? Malheureusement, GCC 4.4 n'est pas pris en charge sur ma plate-forme cible (matériel propriétaire), donc je ne peux pas utiliser l'attribut d'optimisation - c'est-à-dire __attribute__((optimize(...))).

En outre, sur la chaîne d'outils pour cette plate-forme cible, il est un outil de construction automatique en vrac; il n'est donc pas possible de séparer les fonctions dans un fichier séparé et de modifier les paramètres d'optimisation, car les fichiers d'un projet peuvent être automatiquement combinés pour augmenter la vitesse de compilation et de liaison. Je devrais créer une bibliothèque distincte de ces fonctions et la faire relier afin de faire la méthode de séparation. Cela pourrait être un peu plus douloureux que cela ne le serait, surtout s'il y a une méthode plus simple d'accomplir cela.

Répondre

4

On dirait que le __attribute__((optimize(...))) est le seul moyen de contrôler l'optimisation base par fonction dans GCC. Ainsi, avec GCC 4.1.1, séparer une bibliothèque de fonctions à optimiser est en effet votre seule option.

+0

Ugghh .. J'espérais qu'il y aurait un moyen plus facile. Je suppose que je vais devoir souffrir jusqu'à ce qu'ils commencent à soutenir 4.4 GCC :-( – Adisak

2

avec GCC 4.4 vers le haut, vous pouvez utiliser pragma d'optimisation, comme détaillé dans 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

j'ai remarqué que, dans une méthode de classe cette option ne fonctionne que si le #pragma est dans la déclaration de classe (.h). Il n'a pas un effet sur la définition de la méthode (fichier .cpp). – mgruber4

Questions connexes