2010-11-25 21 views
1

Betrachten Sie dieses Stück Code:Ausführungszeit Unterschiede, gibt es irgendwelche?


class A { 
    void methodX() { 
    // snip (1 liner function) 
    } 
} 

class B { 
    void methodX() { 
    // same -code 
    } 
} 

nun andere Art und Weise i gehen kann, habe ich eine Klasse (AppManager) die meisten, deren Mitglieder sind statisch, (von Legacy-Code, schlagen Sie mich nicht Singletons;))


class AppManager { 
    public: 
    static void methodX(){ 
    // same-code 
    } 
}

Welche sollte bevorzugt werden? Da beide inline sind, sollte es keinen Laufzeitunterschied geben, oder?
Welche Form ist sauberer?

+0

Compiler-Optimierungen funktionieren am besten auf der untersten Ebene, scheitern jedoch vollständig auf der höchsten Ebene (d. H. "Ist dies der beste Algorithmus für die vorliegende Aufgabe"). Daher sollten Sie auf der Ebene optimieren, wo der Compiler nicht kann, nicht auf dieser Ebene. – MSalters

Antwort

6

Nun ist dies ein Problem, so winzig, dass Sie sich nie darum kümmern müssen, es sei denn, die Funktionen werden Tausende von Malen pro Frame aufgerufen (und Sie tun etwas, wo "Frames" wichtig sind).

Zweitens, wenn sie inline sind, wird der Code (hoffentlich) so optimiert, dass es keinerlei Anzeichen dafür gibt, dass die Funktion nicht statisch ist. Es wäre identisch.

Auch wenn sie nicht inline waren, wäre der Unterschied gering. Der ABI würde den "this" -Zeiger in ein Register (oder den Stapel) setzen, was er in einer statischen Funktion nicht tun würde, aber wiederum wäre das Nettoergebnis fast nicht messbar.

Bottom line - schreiben Sie Ihren Code auf die sauberste Weise. Leistung ist an dieser Stelle kein Problem.

+0

+1 Für guten Rat. Wartbarer Code kann danach immer optimiert werden. – ereOn

0

Meiner Meinung nach wäre Inline Art schneller. Da Inline-Funktionen in der Kompilierzeit in Code ersetzt werden, müssen Register nicht gespeichert, Funktionsaufrufe ausgeführt und dann erneut ausgeführt werden. Wenn Sie jedoch eine statische Funktion aufrufen, handelt es sich nur um einen Funktionsaufruf, der viel mehr Aufwand erfordert als der Inline-Aufruf.

+0

statische Funktionen können auch inline ausgeführt werden. – EboMike

+0

@ebomike: Wenn Sie statische Inline verwenden! die Frage will den Unterschied zwischen statisch und inline –

+0

Die Frage lautete "wie beide inline sind". – EboMike

0

Ich denke, dass dies das häufigste Optimierungsproblem ist. Auf der ersten Ebene, wenn Sie einen Code schreiben, versuchen Sie jeden einzelnen Trick, der Compiler helfen würde, wenn der Compiler den Code nicht gut optimieren kann, haben Sie bereits. Das ist falsch. Was Sie in der ersten Stufe der Optimierung während des Schreibens von Code suchen, ist nur sauberer und verständlicher Code, Design und Struktur. Das wird bei weitem besseren Code machen, der von Hand "optimiert" wird.

Regel ist:
Wenn Sie keine Ressourcen zum Benchmark-Code haben, schreiben Sie es um und verbringen Sie viel Zeit für die Optimierung, als Sie keinen optimierten Code benötigen. In den meisten Fällen ist es schwierig, mit jeder Art von Optimierung einen Geschwindigkeitsschub zu erzielen, wenn Sie Ihren Code gut strukturiert haben.

Verwandte Themen