2010-02-12 8 views
2

Une fonction statique dans C peut-elle être potentiellement plus rapide car l'optimiseur du compilateur voit tous les sites d'appel et optimise donc l'épilogue et le prologue de la fonction appelée?fonction statique plus rapide?

+0

Cette question est en fait une question d'évaluation de points légitime, et en faire un wiki communautaire découragera les réponses légitimes. :-) (c'est-à-dire, je pense que les gens ne préfèrent pas répondre à de "vraies" questions si cela ne les aide pas à obtenir des rep.) –

+0

@Chris: J'aimerais bien savoir cela. Puis-je le changer maintenant? – Mike

+0

Non, une fois qu'un poste devient CW il n'y a aucun moyen de le dés-un, par conception. Voir: http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts-on-stack-overflow –

Répondre

3

En théorie, il peut. Pourtant, en même temps, certains compilateurs modernes peuvent effectuer ce que l'on appelle des «optimisations globales», qui sont basées sur l'analyse des relations entre le code à travers les unités de traduction. Cela peut inclure l'analyse de tous les sites d'appel pour une fonction donnée dans l'ensemble du programme (par opposition à une seule unité de traduction) et potentiellement étendre ces optimisations à des fonctions non statiques ainsi.

2

Il peut rendre le compilateur plus disposé à intégrer, oui. Mais, comme toujours, cela dépend du compilateur. Vous devez tester et vérifier l'assemblage de sortie pour être sûr.

4

Si votre fonction est appelée à partir de la même unité de traduction (static), les compilateurs peuvent déjà facilement intégrer ces appels, que la fonction soit déclarée static ou non.

Certains compilateurs de qualité effectuent également une optimisation de l'ensemble du programme, de sorte que l'incrustation et d'autres optimisations peuvent se produire même pour les appels à des fonctions dans une unité de traduction différente.

+1

Oui! Pouvez-vous dire 'LLVM'? Ce qui semble absolu dans la pratique de la programmation s'avère souvent éphémère. –

+0

@Tim: +1 <3 LLVM (et autres systèmes de compilation dynamique). Mais sérieusement, même les éditions haut de gamme de Visual C++ feront des optimisations de programme complet pour vous. –

+1

Et GCC pauvre ne peut pas le faire encore :(Mais j'ai entendu le travail est en cours pour l'ajouter. –

Questions connexes