48 votes

coût d'interprétation reinterpret_cast

Ma compréhension est que C ++ reinterpret_cast et C pointer cast est juste une fonctionnalité au moment de la compilation et qu'elle n'a aucun coût de performance.

Est-ce vrai?

63voto

MSalters Points 74024

C'est une bonne hypothèse de départ. Toutefois, l'optimiseur peut être limité dans ce qu'il peut assumer dans la présence d'un reinterpret_cast. Ensuite, même si le casting n'a pas d'instructions, le code résultant est plus lent.

Par exemple, si vous avez jeté un entier à un pointeur, l'optimiseur auront probablement aucune idée de ce que le pointeur peut pointer vers. En conséquence, il a probablement supposer que l'écriture à travers le pointeur peut changer n'importe quelle variable. Qui bat très commun optimisations telles que le stockage des variables dans les registres.

6voto

Matt Joiner Points 29194

C'est vrai. Aucun coût autre que tout gain / perte de performances pour l'exécution d'instructions à la nouvelle largeur, que je pourrais ajouter, n'est une préoccupation que dans de rares cas. La diffusion entre des pointeurs sur toutes les plates-formes dont j'ai jamais entendu parler n'a aucun coût et aucun changement de performances.

5voto

doron Points 10296

Les transtypages de style C en C ++ tenteront d'abord un static_cast et n'effectueront un reinterpret_cast que si un transtypage statique ne peut pas être effectué. Un static_cast peut changer la valeur du pointeur en cas d'héritage multiple (ou lors de la conversion d'une interface en type concret), ce calcul de décalage peut impliquer une instruction machine supplémentaire. Ce sera au plus 1 instruction machine donc vraiment très petite.

2voto

Alex Farber Points 19387

Oui c'est vrai. Le type de casting qui a un coût d'exécution est dynamic_cast.

2voto

vulkanino Points 5855

Vous avez raison, mais pensez-y: reinterpret_cast signifie peut-être une mauvaise conception ou que vous faites quelque chose de très bas niveau.

la conversion dynamique au lieu de cela vous coûtera quelque chose, car elle doit chercher dans une table de recherche au moment de l'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X