Schneller Code vs. Übersichtlichkeit/Wartbarkeit
-
Bei 20-30 instruktionen sollte der compiler jede als inline deklarierte Funktion auch inline machen.
Ich hoff, du compileirst mit maximalen Optimierungen. In dem Setup sollte der Compiler schon ziemlich gut optimieren.
-
cooky451 schrieb:
Oh nein, du hast den Code für zwei for-Schleifen verdoppelt. Ist doch völlig egal.
Viel interessanter finde ich, dass der Compiler offensichtlich nicht rafft, dass er das if() nur einmal machen muss..Wie gesagt, die condition kann sich zur Laufzeit ändern (aber nicht während dem Funktionsaufruf). Der VS2008 hats nicht besser optimiert (obwohl er es hätte können).
-
slax schrieb:
Wie kann ich den Compiler zwingen den gesamten code zu inlinen?
Das kannst du auch so nicht.
slax schrieb:
Wie gesagt, die condition kann sich zur Laufzeit ändern (aber nicht während dem Funktionsaufruf).
Dann helfen templates natürlich nix.
-
otze schrieb:
Bei 20-30 instruktionen sollte der compiler jede als inline deklarierte Funktion auch inline machen.
Ich hoff, du compileirst mit maximalen Optimierungen. In dem Setup sollte der Compiler schon ziemlich gut optimieren.
Ok, ich sollte noch folgendes erwähnen:
Die Compilereinstellungen sind auf optimale Geschwindigkeit eingestellt.
Der Code muss von unterschiedlichen Compilern für verschiedene Plattformen kompiliert werden (x86 u. x64).Ja er sollte aber wie kann ich mir sicher sein, ohne jedesmal das Disassembly zu prüfen?
-
slax schrieb:
Ja er sollte aber wie kann ich mir sicher sein, ohne jedesmal das Disassembly zu prüfen?
gar nicht...
-
dot schrieb:
Das kannst du auch so nicht.
Doch, und zwar indem ich ihn über die hässliche Macromethodik ihn dazu zwinge den kompletten Code aufzublähen. Aber das will ich ja nicht.
-
Gut, Makros sind natürlich ein Weg. Aber ich würd einfach eine inline Funktion verwenden.
-
dot schrieb:
slax schrieb:
Wie gesagt, die condition kann sich zur Laufzeit ändern (aber nicht während dem Funktionsaufruf).
Dann helfen templates natürlich nix.
Hm.. warum nicht?
template<bool condition> void calc() { for () { for() { if (condition) } } }
Klar, das ist immer noch nicht erzwungen, aber wenn der Compiler hier immer noch nicht optimiert fress ich nen Donut.
-
Weil condition zur Compiletime bekannt sein muss...
EDIT: Achso, es geht wirklich nur um ein if. Dann sind Templates natürlich die Lösung...
-
dot schrieb:
Weil condition zur Compiletime bekannt sein muss...
Na ja..
cout << "Wanna condition?"; bool wanna; cin >> wanna; if (wanna) calc<true>(); else calc<false>();
-
Ja, das ist die Lösung. Ich dachte bei Condition gings um irgendwelche Werte die erst irgendwo mitten drin zur Laufzeit bestimmt werden müssten und so...
-
Ahja danke, dass hilft mir ungemein.
Hatte templates "sorum" bisher noch nicht benutzt.
-
slax schrieb:
Ahja danke, dass hilft mir ungemein.
Hatte templates "sorum" bisher noch nicht benutzt.ist doch auch humbug...
-
King George schrieb:
humbug...
Bitte bleib doch im NadRW Forum, da schätzen wir alle deine Meinung sehr.
-
Man schreibt fuer Datenforma A eine Funktion, fuer B, fuer C, ... da wuerde ich dann gemeinsame Teile nicht weiter in Funktionen auslagern. Wenns dann mehrmals ist, ist es halt so. Auf dem Top-Level bleibt es aber uebersichtlich. Dazu braucht man nicht zwingend Templates.
-
Grund: Die Verarbeitung an "einem Stück" ist schnell. Kapselt man nun jetzt gemeinsam genutzte Codeteile bricht die Performance teilweise massiv ein, weil der Compiler dann halt Funktionsaufrufe macht, o.g. Konstanten nicht mehr zur Compilezeit berechnet sondern zur Laufzeit.
Und was ist mit inline?
-
Was soll damit sein?
-
knivil schrieb:
Man schreibt fuer Datenforma A eine Funktion, fuer B, fuer C, ... da wuerde ich dann gemeinsame Teile nicht weiter in Funktionen auslagern. Wenns dann mehrmals ist, ist es halt so. Auf dem Top-Level bleibt es aber uebersichtlich. Dazu braucht man nicht zwingend Templates.
Nö aber mit Templates ist das halt drei mal weniger Code..
-
Naja dann habe ich keine Aufrüfe mehr, sondern direkt "geinlineten" code, oder irre ich mich?
Sodass zwar für den Compiler eine Codeduplizierung existiert, aber nicht für den Programmierer. Die Geschwindigkeit bleibt dennoch gleich.
-
cooky451 schrieb:
Nö aber mit Templates ist das halt drei mal weniger Code..
Haha! Es kommt immer drauf an: http://www.youtube.com/watch?v=zh8W4ZglOlw 49:35 . Ich kann dir auch leicht eine Aufgabe geben, an der du dich probieren kannst.