gcc a le comportement du C++ (extern inline est une extension), pas celui du C99. Ne me demande pas pourquoi en C99 on n'a pas pris le comportement du C++...Envoyé par gege2061
gcc a le comportement du C++ (extern inline est une extension), pas celui du C99. Ne me demande pas pourquoi en C99 on n'a pas pris le comportement du C++...Envoyé par gege2061
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
Les compilateurs essaient l'inliner assez tôt pour permettre ce genre de choses. La propagation des constantes dans du code inline peut avoir des effets époustouflants.Envoyé par InOCamlWeTrust
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
Excuse-moi, mais je n'ai pas bien saisi ce que tu veux dire par "inliner tôt" et "propagation des constantes".
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
Les compilateurs implémentent plusieurs optimisations (Munchnick dans Advanced Compiler Design and Implementation en donne une cinquantaine). De mémoire, on fait l'inlining assez tôt parce que c'est une optimisation qui a tendance à en permettre d'autres.Envoyé par InOCamlWeTrust
Propager les constantes, c'est déterminer quelles variables contiennent une valeur constante (même si l'expression n'est pas constante pour le langage) et remplacer la variable par la valeur. Dans le cas de paramètres de fonction, on peut parfois supprimer pas mal de code en faisant ça.
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
mais justement, si j'ai bien compris, on ne gère pas du tout de pile en passant par une macro puisqu'on évite l'appel de fonction et que l'exécution suit son "cours normal". Donc à priori ça serait toujours ça de gagné.Envoyé par InOCamlWeTrust
Mais si ce que dis Jean-Marc est vrai (moi j'y crois !), ça ne serait pas grand chose de gagné.
Bon je passais simplement pour un petit merci pour toutes ces réponses !
Donc, pour faire une petite synthèse, actuellement encore, seul C89 assure une portabilité maximale. Microsoft a décidé de ne pas imlémanter la nouvelle norme, tandis que l'implémantation de GCC est incomplète (quelques retours d'expériences sur d'autres compilateurs tels que lcc ou d'autres?):
http://gcc.gnu.org/c99status.html pour le status de C99 dans GCC
En particulier, l'implémantation des fonctions inline par GCC ne respecte pas la norme C99 et possède le status "broken". Ainsi, l'utiliation du pré-processeur reste nécessaire pour optimiser des fonctions de taille raisonnable en économisant le surcoût des appels de fonction.
Médinoc ajoute que le passage par macro ne permet pas de vérification de type, et J-M Bourget ne pense pas que le surcoût engendré par des appels de fonction sont un handicap sur les processeurs actuels, et ne s'en inquiète pas. Supposons donc qu'on se limite à l'utilisation de C89. Compte tenu que les appels de fonctions semblent présenter un surcoût raisonnable en terme de performance, y a-t'il parmi vous des adeptes du "tout fonction" qui préfèrent systématiquement un appel de fonction (même mon inlinée) à l'utilisation d'une macro?
Merci encore pour vos réponses fort intéressantes et meilleures salutations
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
A noter qu'il est possible d'utiliser les fonctions inline de gcc de maniere compatible avec C99. C'est seulement quand on commence a jouer avec des particularites de la visibilite entre unites de compilation (la meme fonction inline dans un et pas dans l'autre) ou peut-etre des choses comme des variables statiques dans une fonction inline que ca joue un role.Envoyé par mujigka
Oui. Pour une autre raison: utiliser des fonctions non inline reduit le couplage (modifier l'implementation d'une fonction ne force pas a recompiler toutes les unites qui l'utilise). Passer a des fonctions inlines ou des macros c'est de l'optimisation. Rappel:Compte tenu que les appels de fonctions semblent présenter un surcoût raisonnable en terme de performance, y a-t'il parmi vous des adeptes du "tout fonction" qui préfèrent systématiquement un appel de fonction (même mon inlinée) à l'utilisation d'une macro?
Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.
- M.A. Jackson
"More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity."
- W.A. Wulf
"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil."
- Donald Knuth
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
Aurais-tu un exemple de code où la compatibilité est respectée et un autre où des problèmes évidents apparaissent avec GCC. Il faudra que j'étudie ça, car ça m'intéresse! (Au passage, quelqu'un connaît-il un compilateur qui implémente C99 dans sa totalité ...et quelqu'un y a-t'il une idée des raison lesquelles certains compilateurs ont décidé de ne pas implémanter cette norme).Envoyé par Jean-Marc.Bourget
L'usage intempestif de macros, c'est donc de l'optimisation prématurée et déconseillée aux débutants. Il est donc raisonnable de proner l'utilisation systèmatique de fonctions (non inlinées), même pour l'implémentation de fonctions de petite taille auxquelle on fait souvent appel, en tout les cas dans la phase préliminaire du codage.
Meilleures salutations
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Je parlais de la vraie récursivité VS récursivité "gérée à la main" avec pile logicielle.Envoyé par benhoeil
When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager