Konstanten Vorteil?
Übersicht

![]() |
TimBoBetreff: Konstanten Vorteil? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
die Frage lässt mich nicht los (ich hasse was wissen zu wollen aber keine Lösung mit google zu finden). Also wir lernen alle brav, dass beim Programmieren Konstanten schneller sein sollen. Nur warum sind diese schneller ? Grüße TimBo PS: Der Unterschied von Runtime und Compiletime konstanten ist: das Compiletime schon beim kompilen verarbeitet werden und Runtime(nicht in BB möglich) beim laufen des Programmes. Warum sind diese Variablen schneller ?? |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sie sind nicht direkt schneller.
Der Vorteil von Konstanten ist ja, dass du zusammengehörige Informationen, z.B. das Offset in einer Bank, mit Konstanten zwischenspeichern kannst, und dann, wenn Informationen hinzugefügt werden, nicht überall das Hardgecodete Offset verändern musst, sondern nur an einer Stelle die Konstante. Sie machen also lediglich das Debuggen und Inhalte verändern schneller. Die Compiletime-Konstanten, so wie sie im BB zu benutzen sind, werden bei der Kompilierung sowieso durch die Werte, die sie enthalten, ersetzt, und sind somit genau gleich schnell (mal abgesehen davon, dass das Kompilieren evtl. geringfügig länger dauert). |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahaa
also werden bei Constanten im Compiletime Stil einfach ersetzt const offset=1 aus function(var+offset) macht der Compiler also function(var+1) d.h. sie nehmen keinen Speicher im Ram ein (einleuchtend) Runtimeconstanten sind dann also nur eine Art constante bei der man dem Compiler verspricht sie nicht zu ändern (weil es vll. nicht nötig ist) aber im Grunde sind das ganz normale globale Variablen ? Danke für die Antwort ![]() TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Manchmal sind Konstanten auch einfach die bessere Wahl um ein Programm lesbarer zu halten. In längeren Quelltexten liest sich z.B. "KEY_UP" besser als "200". | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
da hast du recht !! ![]() Ich mache Scancodes sowieso IMMER am Beginn mit Constanten, ohne könnte ich mir es gar nicht mehr vorstellen. Gruselige Codes wo drinsteht If keyhit(75) then Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
n-HalbleiterBetreff: Runtime-Konstanten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Runtime-Konstanten sind wirkliche Konstanten. Das heißt, sie können nach der Deklaration nicht mehr verändert werden. Runtime-Konstanten zeichnen sich jedoch dadurch aus, dass sie bei der Deklaration einen variablen Wert annehmen können, was bei Compiletime-Konstanten nicht der Fall ist. In der Theorie sind sie beide für einen Compiler für z.B. C++ gleich zu Handhaben. Im C++ müssen ja sowieso alle Variablen im Vorfeld deklariert werden, ansonsten gibt es einen Error. Es gibt also zwei Durchläufe beim kompilieren: Beim ersten wird der Speicher für die Variablen reserviert und die Pointer gesetzt, bzw. schon setzbare Variablen - darunter Compiletime-Konstanten - auf ihren Wert gesetzt. Beim zweiten Durchgang wird dann der Code bearbeitet (in Assembler umgewandelt, interpretiert, ...) bzw. die reservierten Runtime-Konstanten auf ihren Wert gesetzt und dann versiegelt. BB kann scheinbar nur einen, dafür können Variablen eben "on-the-fly" deklariert werden, da nicht vorher Speicherplatz reserviert wird.
Kommt evtl. etwas spät, aber es kommt. ![]() |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Konstanten werden vor dem Compilieren mit ihrem wahren wert ersetzt.
Sprich, wenn du mit constanten arbeitest, ist es für den Compiler genauso, als würdest du mit den richtigen werten arbeiten. aus Code: [AUSKLAPPEN] const SPEED = 3; const KEY_LEFT = 203 const KEY_RIGHT = 205 const KEY_DOWN = 208 const KEY_UP = 200 [...] if keydown(KEY_LEFT) x = x - SPEED if keydown(KEY_RIGHT x = x + SPEED if keydown(KEY_UP) y = y - SPEED if keydown(KEY_DOWN) y = y + SPEED [...] wird dann Code: [AUSKLAPPEN] if keydown(203) x = x - 3 if keydown(205) x = x + 3 if keydown(200) y = y - 3 if keydown(208) y = y + 3 Ein weiterer Vorteil ist, dass du durch constanten einfach codeblöcke definieren kannst, die nicht mit compiliert werden. aus: Code: [AUSKLAPPEN] const DEMO = 1 repeat if keyhit(57) print "tolle grundfunktion meines spiels" if not DEMO print "Tolle bezahlfunktion. Du hast die vollversion :)" else print "Du hast nur die Demo :(" end if end if until keyhit(1) wird beim compilieren. Code: [AUSKLAPPEN] repeat if keyhit(57) print "tolle grundfunktion meines spiels" print "Du hast nur die Demo :(" end if until keyhit(1) Wenn du den bytecode durchsuchst, wirst du sehen, dass die Texte aus dem vollversion-bereich nicht vorkommen. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Ein weiterer Vorteil ist, dass du durch constanten einfach codeblöcke definieren kannst, die nicht mit compiliert werden.
Das wusste ich ja noch gar nicht, das ist ja echt genial !! Werde ich mir merken Gruß TImBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mir stellt sich die Frage, warum (falls überhaupt)
Code: [AUSKLAPPEN] If Var1 = 1 Then ...
schneller ist als Code: [AUSKLAPPEN] If Var1 = Var2 Then ...
Ist ersteres nun eigentlich wirklich schneller? Und wenn ja, wieso überhaupt. Also was macht der PC denn dann anders..? (Mal im Hinblick auf BB und C++ oder Assembler) |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, Var2 ist nur eine Adresse.
Das heißt der PC muss jetzt die Zahl AN DER ADRESSE heraussuche. Wenn du eine Konstante hast, weiß der PC die Zahl direkt, ohne sie erst heraus suchen zu müssen. Aber das merkt man nicht... wegen der Geschwindigkeit... lg MD |
||
.... |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
tata hier ist glaube ich eine Lösung des Probs in sicht BlitzBasic: [AUSKLAPPEN]
meine Zahlen: 297 (ohne var) 294 (constante) 260 (locale) 219 (globale) 299 293 259 221 297 297 256 216 bei mir sind die globalen Variablen am schnellsten, keine Var & Konstante das langsamste und das mittelfeld die Lokalen das kann doch ned sein ? Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mein Ergebnis (mit BMax):
ohne Variablen: 163 mit Konstanter: 190 mit Lokaler Var: 170 mit Globaler Var: 180 ohne Variablen: 183 mit Konstanter: 167 mit Lokaler Var: 169 mit Globaler Var: 195 ohne Variablen: 163 mit Konstanter: 172 mit Lokaler Var: 194 mit Globaler Var: 166 2x ist ohne Variable am schnellsten, 1x die Konstante. Am langsamten ist 1x die Konstante, 1x die lokale und einmal die globale Variable. So ein Chaos. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch BMax (Schleifen verhundertfacht):
Code: [AUSKLAPPEN] ohne Variablen: 8100
mit Konstanter: 8213 mit Lokaler Var: 8103 mit Globaler Var: 9611 ohne Variablen: 8279 mit Konstanter: 8601 mit Lokaler Var: 8433 mit Globaler Var: 10897 Dadurch lässt sich folgendes (erstaunliches) feststellen: In Bmax ist die Reihenfolge so: (schnell nach langsam) ohne, lokale, konstante, globale Irgendwas scheint BMax da nicht richtig zu machen, wenn denn eigentlich nach dem Kompilieren ohne und konstant gleich sein sollten... |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
genau das denke ich mir auch, ist auch in B3D so.
Sehr merkwürdig alles. Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist überhaupt nichts merkwürdiges dran.
Eure Geschwindigkeitstest könnt ihr vergessen. Sowohl BB als auch B3D optimieren nach den ersten Sekunden die Speicherausnutzung und anderes Zeug. Das ist auch der Grund warum manche Programme kurz nach dem Start etwas hakeln oder rukeln. Wenn ihr nun mitten drin einen Speedtest durchführt, dann wird das Ergebnis verfälscht sein. Nun mal kurz was Konstanten sind. Eine Konstante wird im Code vom Precompiler direkt durch die Zahl ersetzt. Dieser Wert steht nun auch so überall im Programm fest. Muß also nicht erst aus einem anderem Teil vom Speicher ausgelesen werden. Eine Variable dagegen beinhaltet praktisch nur eine Speicherzieladresse wo dann der tatsächliche Wert gespeichert ist. Wenn nun da ''x'' steht, dann muß der Wert aus ''x'' ausgelesen werden bzw. direkt zur Rechenroutine zum Prozessor weiter geleitet werden. Das dauert i.d.R. etwas länger. Im übrigen ist ein Speedtest mit so simplen Routinen nicht anwendbar, da sich hier eine ganz andere Größe mit einschleicht. Nämlich der Optimierungsdrang des Prozessors selbst. Das heisst, wenn ewig ein und die selben Aufgaben bearbeitet werden, speichern moderne Prozessoren (der letzten gefühlten 10 Jahre) den Maschinencode bei sich ab und rufen ihn nur noch ab, statt tatsächlich den ''echten'' Code zu bearbeiten. Mit ähnlichen Tricks arbeiten Java.Entwickler um ihre Programmiersprache nachweislich als die schnellste der Welt darzustellen. Eben mit solchen unnütz-Speedtests. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich wusste es... immer wenn keiner weiß wos langgeht, kommt Hectic schreibt ein Beitrag und owned alle. Respekt Danke ![]() Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Cyderic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gibt übrigens noch ne nette Anwendungsmethode für Const. Wenn man so Menüabfragen hat wie
BlitzBasic: [AUSKLAPPEN]
Hat man ja oft die schwierigkeit das man anhand der Zahlen nicht immer weiss was das jetzt für ein Menü war (ausser es steht als kommi daneben). Da nimmt man dann eben BlitzBasic: [AUSKLAPPEN]
Ganz nett wie ich finde ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group