Comment est-ce que C/C++ copie des structs?

Lors du passage d'une struct en C/C++ en valeur la structure du contenu doit être copié. Comment faire des compilateurs? I. e., qui les instructions de montage sont généralement émises pour cette copie?

À quelle vitesse ces choses, lorsque, par exemple, par rapport à un appel à memcpy?

Maintenant, considérons ce code:

struct X { int i, j, k; };

void foo(X x);

void foo( int i, int j, int k);

Quelle est la différence entre un appel foo(X) et toto(int,int,int), ou le code assembleur généré être la même (en considérant le passage de paramètres)?

Pourquoi ne pas vous le profil et trouver?
Tous les compilateurs options de support pour générer les fichiers d'assemblage à la place de fichiers de l'objet. L'utiliser et de regarder le montage vous-même. Aussi, si le compilateur ne fait une copie ou ne peuvent compter sur des optimisations.
Grigore: Parce que mon profilage résultats pourraient n'être vrai pour mon ordinateur ou mon compilateur. Je suppose que quelqu'un avec une connaissance plus profonde est une meilleure source ici que mon profilage.
Pileborg: là encore, ce n'est vrai que pour mon compilateur et mon code. Il pourrait être possible qu'avec un autre compilateur totalement différentes de ce code est généré. Donc, je veux savoir ce de quelqu'un qui comprend les détails derrière ce processus, non pas à partir d'un test qui essaie juste, sans savoir POURQUOI, ces instructions sont générés.
Si vous voulez une réponse générale qui est valable pour toutes les plateformes et tous les compilateurs, vous ne recevrez pas. La seule chose que vous pouvez faire est de vérifier comment cela fonctionne pour vous, pour votre programme, de votre plate-forme à l'aide de votre compilateur.

OriginalL'auteur gexicide | 2013-02-15