2010-07-14 7 views
0

Supposons que vous ayez une méthode statique privée appelée Inst() qui permet à la classe de récupérer l'instance unique de lui-même dans l'application dans ses méthodes statiques. Peut-être Inst() est défini comme quelque chose ..Frais généraux de récupération d'un objet par rapport au stockage en local

return App::GetApp()->CurrentState()->MyClass(); // Inst returns a reference 

... Comparer ce

// I prefer this 
Inst().DoThis(); 
Inst().DoThat(); 
Inst().DoFoo(); 

à ...

MyClass inst = Inst(); 
inst.DoThis(); 
inst.DoThat(); 
inst.DoFoo(); 

Dans une application où la performance est assez importante, est le surcoût dans le premier ensemble de fonctions non-trivial? Les compilateurs modernes sont-ils capables d'optimiser ces choses?

Je réalise que le profilage répondrait à ma question dans mon cas, mais je cherche une règle empirique ici. A quel point est-il bénéfique de stocker des données existantes dans une variable locale plutôt que de la retrouver, ou est-ce que cette ré-extraction est généralement optimisée par les compilateurs modernes?

+2

Vos exemples diffèrent. Le premier appelle les fonctions sur la référence, l'autre version en fait une copie. – pmr

+0

Merci, n'a pas réalisé que l'attribution à une référence fait une copie. (Bien que je restreignais effectivement le constructeur et l'assignation de copie dans la classe ainsi le compilateur l'aurait attrapé). – kroz

+0

Ce n'est pas le cas. Mais vous n'assignez pas à un _reference_ ('MyClass & inst'), mais vous initialisez un nouveau' MyClass' avec son constructeur de copie ('MyClass inst (const MyClass &)'). –

Répondre

0

Vous vous inquiétez pour les mauvaises choses et vous avez répondu à la question vous-même. Le profil et optimiser si c'est un goulot d'étranglement.

Quoiqu'il en soit: Inst() va probablement être inline, donc il n'y a pas de surcharge d'appel de fonction et comme il est statique et le résultat ne dépend pas de paramètres extérieurs évidents, les compilateurs peuvent l'optimiser complètement .

Questions connexes