Pour les objets ou les données primitives avec une taille égale ou inférieure à la taille d'un pointeur la méthode de passage la plus efficace à une fonction serait certainement en valeur, mais je voudrais savoir s'il existe un outil capable de déterminer la meilleure méthode de passer des objets de classes ou des données primitives avec des tailles plus grandes que la taille d'un pointeur sur des fonctions sur une plate-forme, comme quelque chose d'outils de boost?Un outil pour déterminer le moyen le plus efficace de transmettre des données, par référence ou par valeur?
Répondre
Oui, cet outil est le compilateur. Passer par référence et si l'optimiseur remarque qu'il peut s'en tirer en stockant une copie de l'objet au lieu de l'adresse pour les objets dont la taille est inférieure ou égale à celle d'une adresse, alors il peut le faire. C'est probablement la meilleure approche pour le code basé sur un modèle, où vous ne pouvez pas être sûr que vos paramètres sont grands ou petits objets - utilisez simplement des références de toute façon.
Le compilateur n'est pas garanti ou requis pour effectuer cette optimisation, mais si ce n'est pas le cas, il s'agit probablement d'un problème de performance négligeable, il n'y a donc pas lieu de s'inquiéter.
Il peut aussi fonctionner dans l'autre sens: Si vous passez par valeur, le compilateur peut également être en mesure d'effectuer l'élision de la copie, en éliminant la copie. Donc de toute façon, le compilateur va essayer de faire aller votre code rapidement. :) – jalf
Bon point, ne s'en est pas rendu compte - mais le coût de l'optimisation qui ne se produit pas est plus élevé. Si un objet très volumineux est passé en valeur, il peut y avoir un gros problème de performance, mais si un petit objet est passé par référence, ce n'est probablement rien. Donc, je préférerais passer par référence de toute façon. – AshleysBrain
Il y a quelques scénarios où vous voudrez certainement passer par la valeur: http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ –
Oui, Boost a cela, appelé call traits. Mais son coût élevé en illisibilité est plus élevé que le gain microscopique en efficacité. À mon humble avis.
Vive & HTH.,
Merci pour le lien. Maintenant, je sais ce que "meilleure méthode" signifie :-). –
Sauf si vous êtes dans une section critique, il est peu probable que astronomiquement pointeur déréférencement est le goulot d'étranglement de votre application, et si vous êtes à la section critique, vous feriez mieux de regarder cache amical algorithmes, de sorte que vous n'aurez pas besoin de payer le coût de la déréférencement de beaucoup. En bref, passez tout ce qui est plus grand que la taille du pointeur par référence/pointeur, et ne vous préoccupez que des performances lorsque vous savez que vous devez vous en soucier. L'optimisation prématurée est la racine de tout Mal.
- 1. Traitement des données par référence ou par valeur dans python
- 2. moyen le plus efficace pour obtenir des variables/membres
- 3. Le moyen le plus efficace pour déterminer la valeur décimale est entier en Java
- 4. Le moyen le plus efficace pour commander une liste par un aléatoire
- 5. Le retour par référence rvalue est-il plus efficace?
- 6. Passage de chaînes C++ par valeur ou par référence
- 7. Le moyen le plus efficace pour créer des fichiers Excel
- 8. Le moyen le plus efficace pour obtenir des listes?
- 9. Le moyen le plus efficace pour déterminer si un élément HTML est dans la fenêtre d'affichage?
- 10. Le moyen le plus efficace pour déterminer si une longueur de chaîne! = 0?
- 11. Sql Server Le moyen le plus efficace pour rejoindre
- 12. Le moyen le plus efficace de nommer un avatar utilisateur?
- 13. Django: moyen le plus efficace pour interroger de nombreux enregistrements?
- 14. La chaîne se termine par '\ n' quel est le moyen le plus efficace de manipuler?
- 15. Le moyen le plus efficace pour tester les liens
- 16. Quel est le moyen le plus efficace pour stocker et analyser des données dans AS3?
- 17. Quel est le moyen le plus léger pour transmettre des données sur Internet en utilisant Python?
- 18. Quel est le moyen le plus efficace d'obtenir des données d'un modèle dans CakePHP?
- 19. moyen efficace pour déterminer si un message est un spam?
- 20. Quel est le moyen le plus efficace pour charger un dictionnaire en Python?
- 21. Le moyen le plus efficace pour trouver le plus grand des trois nombres
- 22. Passer enum par valeur ou référence?
- 23. Le moyen le plus efficace pour écrire dans un fichier de largeur fixe (Ruby)
- 24. moyen le plus efficace pour mettre à jour un site (beaucoup de données) sans actualisation?
- 25. Puis-je transmettre une valeur simple par référence dans ColdFusion?
- 26. Le moyen le plus efficace de remplir tableau à partir des valeurs de base de données?
- 27. Le moyen le plus efficace de convertir BCD en binaire
- 28. Devrais-je prendre des arguments pour aligner les fonctions par référence ou par valeur?
- 29. Le moyen le plus efficace d'indexer un tableau retourné?
- 30. Quel serait le moyen le plus efficace de faire cette recherche (mysql ou texte)?
Un profileur ou microprocesseur? – Necrolis
@ Necrolis_Comment être capable de faire le travail? – Pooria