Maison > développement back-end > C++ > le corps du texte

Les fonctions virtuelles en C sont-elles un goulot d'étranglement en termes de performances ?

Patricia Arquette
Libérer: 2024-11-19 08:33:02
original
607 Les gens l'ont consulté

Are Virtual Functions in C   a Performance Bottleneck?

Implications sur les performances des fonctions virtuelles en C

Vous avez exprimé des inquiétudes concernant l'impact sur les performances des fonctions virtuelles dans la conception de votre classe. Est-ce une préoccupation valable ou peut-il être considéré comme une optimisation prématurée ?

Pour répondre à votre question, nous avons effectué des tests de performances sur un processeur PowerPC 3 GHz. Nous avons créé une classe vectorielle 4D simple avec des fonctions get/set. Nous avons effectué des tests avec les fonctions définies comme appels de fonction en ligne, virtuels et réguliers.

Voici les résultats :

  • En ligne : 8 ms (0,65 ns par appel)
  • Direct : 68 ms (5,53 ns par appel)
  • Virtuel : 160 ms (13 ns par appel)

Dans ce cas, avec les données placées dans le cache L1, les appels de fonction virtuelle étaient environ 20 fois plus lent que les appels en ligne. Cependant, il est crucial de considérer le contexte de cette différence de performances.

Chaque itération de la boucle de test impliquait 12 288 appels de fonction. Par conséquent, la boucle virtuelle a pris 92 ms de plus que la boucle directe, ce qui a entraîné une surcharge supplémentaire de seulement 7 nanosecondes par appel de fonction.

Sur la base de ces résultats, nous concluons que :

  • Les fonctions virtuelles sont en effet plus lentes que les fonctions directes.
  • La pénalité en termes de performances est négligeable, sauf si vous avez l'intention de les appeler extrêmement fréquemment (de l'ordre de millions de fois par seconde).

Dans dans la plupart des situations, à moins d'optimiser des performances extrêmes, les compromis associés à l'utilisation de fonctions virtuelles pour l'encapsulation et la flexibilité l'emportent sur tout problème de performances potentiel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal