Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Was ist schneller?Mit einer Procedure?
Borlox - Sa 08.11.03 00:04
Titel: Was ist schneller?Mit einer Procedure?
Hi Leute,
ich hab da mal eine Frage, weiß aber noch nicht genau wie ich mein Problem beschreiben soll(deshalb auch der komische Titel)!
Ich kann ja erstmal klein anfangen: Wenn ich eine IF-Verzweigung habe in meinem Quelltext und diese Verzweigung nicht zutrifft, wird dann nachher in der Exe trotzdem jede einzelne Zeile durchlaufen oder überspringt er das ganze????
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if 1>10 then Begin Punkt1; . . . Punkt22222; End; |
Und wenn ich das ganze auch noch mit einer Procedure mache, durchläuft er diese dann auch noch jedesmal irgendwie komplett? Kann ich mit zwar nicht vorstellen, aber man weiß ja nie!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Begin if 2>20 then Procedure1; End;
Procedure1; Begin Punkt1; . . . Punkt22222; End; |
Ich hoffe irgendjemand versteht, was ich meine! Ich weiß leider nicht, wie ich es am Besten erklären soll!
THX
Borlox
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Alex - Sa 08.11.03 00:33
Hi,
beim ersten Beispiel werden deine Punkte nur ausgeführt wenn i>10 ist wenn nicht dann gehts nach dem end; weiter beim zweiten ist es fast genau so wenn deine Bedingung erfüllt ist wird die Procedure aufgerufen die die Anweisungen ausführt
Gruß, Alex
Terra23 - Sa 08.11.03 01:12
... ich will ja nicht pingelig sein, aber die erste Prozedur wird nie durchlaufen, weil es sich nicht um ein I handelt, sondern um eine 1. Und 1 ist nie größer als 10.. :-) Sonst trifft aber deine Erklärung soweit zu, Alex.. :P
Alex - Sa 08.11.03 12:27
da hast Du natürlich recht :lol: hab das überlesen
aber dann ist das doch eigentlich sinnlos wenn das nie zutrifft :shock:
Gruß, Alex
Borlox - Sa 08.11.03 13:14
Titel: Klar
Natürlich ist mir klar, dass die Bedingung niemals zutrifft, sollte auch so sein, nur so zum veraunschaulichen!
Wichitg ist mir eigentlich nur, ob in der Exe nachher wirklich jede Programmzeile durchlaufen wird oder ob er zum End springt! Denn wenn ich tausende Befehle dazwischen habe, dann macht sich das schon bemerkbar!
THX
JoelH - Sa 08.11.03 13:32
Titel: hmm,
nein. Dass wird nicht durchlaufen, der Befehlszeiger wird direkt hinter die Sache gesetzt. Egal welche Variante du verwendest. Ein Asemblerprogramm ist da etwas anders strukturiert. Proceduren sind nichts weiter wie unterprogramm die irgendwo liegen und angesprungen werden. Wenn sie klein sind werden sie wohl direkt aufgelöst und in den Code eingebaut dass spart den Sprung und den Rücksprung. Aebr da dein Unterprogrammteil eh nie erreicht wird ist es wurscht was du benuttz.
Nightmare_82 - Do 13.11.03 13:27
wenn du die Codeoptimierung anschaltest(oder vielleicht sogar ohne), sollte Delphi so intelligent sein, den kompletten Code mit der Abfrage, die nie zutrifft, wegzuoptimieren. Ich habe das nicht getestet, aber in Java und C++ ist das so und ich gehe mal stark davon aus, daß das in Delphi auch so ist.
das ist ganz praktisch für z.B. sowas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| const boolean DEBUG = false;
... if DEBUG then begin end; |
das ist oft ein bischen leichter zu handhaben als IFDEFS
Delete - Do 13.11.03 13:39
Das sehe ich ein bisschen anders. Solange du nur eine Bool-Bedingung prüfst, funktionieren IFDEFs genauso gut. Das Ergebnis ist auch das selbe. Nutzt du die Bedingung nicht, wird auch der Code ignoriert.
Nightmare_82 - Do 13.11.03 13:57
ich wollte damit auch nicht sagen, daß es besser ist sondern daß es eine Alternative ist.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Type TGameMode = (gmTest, gmPlay, gmLevelEdit); const MODE : TGameMode = gmLevelEdit;
... if MODE = gmPlay then begin end else if MODE = gmLevelEdit then begin end |
für sowas ists halt praktisch, bei Booleans geb ich dir Recht
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!