Heim  >  Artikel  >  Backend-Entwicklung  >  Sind virtuelle Funktionen in C ein Leistungsengpass?

Sind virtuelle Funktionen in C ein Leistungsengpass?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-19 08:33:02609Durchsuche

Are Virtual Functions in C   a Performance Bottleneck?

Auswirkungen virtueller Funktionen auf die Leistung in C

Sie haben Bedenken hinsichtlich der Auswirkungen virtueller Funktionen auf die Leistung in Ihrem Klassendesign geäußert. Ist dies ein berechtigtes Anliegen oder kann es als vorzeitige Optimierung angesehen werden?

Um Ihre Frage zu beantworten, haben wir Leistungstests auf einer 3-GHz-PowerPC-CPU durchgeführt. Wir haben eine einfache 4D-Vektorklasse mit Get/Set-Funktionen erstellt. Wir haben Tests mit den Funktionen durchgeführt, die als Inline-, virtuelle und reguläre Funktionsaufrufe definiert sind.

Hier sind die Ergebnisse:

  • Inline: 8 ms (0,65 ns pro Aufruf)
  • Direkt: 68 ms (5,53 ns pro Anruf)
  • Virtuell: 160 ms (13 ns pro Aufruf)

In diesem Fall waren virtuelle Funktionsaufrufe mit der Datenanpassung im L1-Cache etwa 20-mal langsamer als Inline-Aufrufe. Es ist jedoch wichtig, den Kontext dieses Leistungsunterschieds zu berücksichtigen.

Jede Iteration der Testschleife umfasste 12.288 Funktionsaufrufe. Daher dauerte die virtuelle Schleife 92 ms länger als die direkte Schleife, was zu einem zusätzlichen Overhead von nur 7 Nanosekunden pro Funktionsaufruf führte.

Basierend auf diesen Ergebnissen kommen wir zu folgendem Schluss:

  • Virtuelle Funktionen sind in der Tat langsamer als direkte Funktionen.
  • Der Leistungsverlust ist vernachlässigbar, es sei denn, Sie möchten sie extrem häufig aufrufen (in der Größenordnung von Millionen). Mal pro Sekunde).

In den meisten Situationen überwiegen die mit der Verwendung virtueller Funktionen für Kapselung und Flexibilität verbundenen Kompromisse mögliche Leistungsbedenken, es sei denn, sie optimieren eine extreme Leistung.

Das obige ist der detaillierte Inhalt vonSind virtuelle Funktionen in C ein Leistungsengpass?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn