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?
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?
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.
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.
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.
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.