Cela ressemble à une optimisation prématurée. Ceci étant dit, il existe des différences et des opportunités, mais elles affecteront plusieurs appels à la fonction plutôt que des performances dans la fonction. Tout d'abord, dans la deuxième option, vous pouvez passer MyStorage comme référence constante. En conséquence, votre code compilé va probablement pousser une seule valeur dans la pile (pour vous permettre d'accéder au conteneur), plutôt que de pousser trois valeurs séparées. Si vous avez des champs supplémentaires (en plus de a-c), envoyer MyStorage non comme référence peut vous coûter plus cher parce que vous allez appeler un constructeur de copie et copier essentiellement tous les champs supplémentaires. Tout cela serait des coûts par appel, pas dans la fonction.
Si vous effectuez des tonnes de calculs avec b et c dans la fonction, la façon dont vous les transférez ou y accédez n'a aucune importance. Si vous passez par référence, le coût initial peut être légèrement plus élevé (puisque votre objet, s'il est référencé, pourrait être sur le tas plutôt que sur la pile), mais une fois accédé pour la première fois, la mise en cache et les registres sur votre machine moyen d'accès à faible coût. Si vous avez passé votre objet par valeur, cela n'a pas vraiment d'importance, car même au départ, les valeurs seront proches de la pile.
Pour le code que vous avez fourni, si ce sont les seuls champs, il n'y aura probablement pas de différence. le "valeurs.variable" est simplement interprété comme un décalage dans la pile, pas comme "rechercher un objet, puis accéder à une autre adresse".
Bien sûr, si vous n'achetez pas ces arguments, définissez simplement les variables locales comme première étape de votre fonction, copiez les valeurs de l'objet, puis utilisez ces variables.Si vous les utilisez réellement plusieurs fois, le coût initial de cette copie n'aura pas d'importance :)
Si les performances sont importantes, il n'y a finalement pas d'alternative à l'écriture de tests de performance. –
Micro-optimisation (nous pourrions peut-être même ajouter une balise pour cela) –
@David: Cette balise existait déjà. ':)' – sbi