Du bist nicht angemeldet.

Werbeanzeige

1

13.10.2016, 21:06

Performanceunterschied eine große Funktion vs. mehrere kleine?

Hallo zusammen,

Folgende Frage:
Ich habe eine Funktion A, die sehr groß ist.
Macht das performancetechnisch einen Unterschied, wenn ich jetzt das, was in der A passiert in weitere kleine Funktionen zerhacke, die dann in A einfach aufgerufen werden?
Rein von der Funktionalität her passiert ja das gleiche, egal ob ich jetzt alles in A stehen hab, oder ob ich es auf andere Funktionen aufgeteilt hab.
Infwiefern optimiert bzw. verkürzt der Compiler (speziell der in Visual Studio) Funktionen, wenn es möglich ist?

lg superolelli

Schorsch

Supermoderator

Beiträge: 5 199

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

2

13.10.2016, 21:31

Es gibt inline-Funktionen. Dabei hast du bei dir im Code eine Funktion, der Compiler kopiert den Code der Funktion in der ausführbaren Datei jedoch einfach an die passende Stelle, so als wenn es keine Funktion wäre, sondern der Code direkt an der aufrufenden Stelle stehen würde. Mit dem inline-Schlüsselwort kannst du theoretisch nun sagen dass eine Funktion inline sein soll. Soweit ich weiß entscheidet das am Ende aber der Compiler für sich, soll heißen selbst wenn du sagst eine Funktion soll inline sein kann es sein dass der Compiler sie in der exe als Funktion behält. Außerdem inlined der Compiler Funktionen wenn er es für richtig hält auch dann wenn du es ihm vorher nicht gesagt hast. Was inline angeht und wie da das genaue Verhalten ist kannst du ja noch mal genau checken. Das ist jetzt wie gesagt nur das Compiler Verhalten so wie ich es im Kopf habe.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

13.10.2016, 21:35

Mit anderen Worten:
Es ist egal, ob lang oder kurz, der Compiler holt dir das beste raus! Weil das so ist, solltest du sie also für dich zur Übersicht immer kurz halten und auf viele aufteilen. So lassen sich auch Bugs einfacher finden und Code-Stücke besser wiederverwenden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

4

14.10.2016, 08:36

Zusätzlich kannst du kleine Methoden auch viel einfacher automatisiert Testen.

5

14.10.2016, 22:19

Danke für die Antworten :)

Ja, inline-Funktionen kenne ich, wusste aber nicht, dass der Compiler das automatisch auch macht.
Dann werde ich in Zukunft meine Funktionen klein halten :)

6

16.10.2016, 11:42

In Java würde die JVM diese Optimierungen sogar live durchführen und den Code in die einzelnen Funktionen kopieren (falls notwendig), um Methodenaufrufe zu sparen.
In C++ muss man die Inline Optimierung glaube sogar erst beim Compiler durch nen Flag einschalten, oder?
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

7

16.10.2016, 13:56

In Java würde die JVM diese Optimierungen sogar live durchführen und den Code in die einzelnen Funktionen kopieren (falls notwendig), um Methodenaufrufe zu sparen.

In C++ würde der Compiler diese Optimierungen sogar durchführen schon bevor du dein Programm startest... ;)

In C++ muss man die Inline Optimierung glaube sogar erst beim Compiler durch nen Flag einschalten, oder?

Jeder ordentliche Compiler heutzutage hat Inlining in einem optimized Build by default eingeschaltet...

Schorsch

Supermoderator

Beiträge: 5 199

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

8

16.10.2016, 15:06

Mich würde es tatsächlich wundern wenn inlining bei Java erst in der JVM passiert.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

TrommlBomml

Community-Fossil

Beiträge: 2 143

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

16.10.2016, 15:07

Soweit ich weiß optimiert der Compiler trotzdem nach eigenen Ermessen? Hat jemand mal nachgeforscht, wie aggresiv der wirklich inlined? Wollte ich schon immer mal wissen.

Nimelrian

Alter Hase

Beiträge: 1 260

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

10

16.10.2016, 15:36

Soweit ich weiß optimiert der Compiler trotzdem nach eigenen Ermessen? Hat jemand mal nachgeforscht, wie aggresiv der wirklich inlined? Wollte ich schon immer mal wissen.

Das hängt auch immer ganz davon ab, wie viel der Compiler zur Compilezeit über dein Programm weiß. Besonders constexpr hilft da enorm. Hier ein schönes Beispiel, wie sehr der Compiler Code optimieren kann.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige