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:
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:
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!