Hi,
ich hab noch ein paar performance fragen bezüglich C++.
Zur info, hier geht es mehr oder weniger um millisekunden, bzw noch weniger.. aber in meinem fall ist jede millisekunde wichtig!
1)
Ich habe eine funktion die eine Farbe (ein Struct aus 4 Floats) zurückliefern muß. Diese wird mehrere millionen mal aufgerufen, etwa so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| CColor doSomething() { CColor result; result = something(); retur result; }
[....] CColor c; for (int i = 0; i < 10000000; i++) c += doSomething(); |
Ist es da ein geschwindigkeits unterschied wenn ich das ganze so umstelle?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| void doSomething(CColor &c) { c = something(); }
[....] CColor c, x; for (int i = 0; i < 10000000; i++) { doSomething(x); c += x; } |
Sprich, macht es einen geschwindigkeits unterschied ob ich in jedem funktionsaufruf eine neue CColor erstelle oder eine übernehme die ich als reference-parameter bekomme? Oder optimiert der compiler das eh weg?
2)
Macht es einen geschwindigkeitsunterschied ob ich einer funktion parameter als referenz oder als pointer übergebe?
C#-Quelltext
1: 2: 3:
| void doSomething(CColor &c) { c.bla(); } |
oder:
C#-Quelltext
1: 2: 3:
| void doSomething(CColor *c) { c->bla(); } |
3)
Ähnlich wie erstens, ist hier ein unterschied?
C#-Quelltext
1: 2: 3: 4: 5:
| CColor x; for (int i = 0; i < 10000; i++) { CColor c = bla(); x += c; } |
und:
C#-Quelltext
1: 2: 3: 4: 5:
| CColor x, c; for (int i = 0; i < 10000; i++) { c = bla(); x += c; } |
Das ich hier nicht diret "x += bla()" mache liegt nur am beispiel, es geht nur um das erstellen eines neuen color-objekts in der for-schleife.. oder wird das sowieso wegoptimiert?
Aya
PS: Hab das gleiche auch im DelphiGL-Forum gefragt:
www.delphigl.com/for...iewtopic.php?p=68824