Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

29.05.2004, 15:25

klingt einleuchtend.

12

29.05.2004, 17:49

Zitat von »"dot"«

if( var ) is schneller als if( var == true ), weil bei der 2. variante noch der ausdruck var == true ausgewertet werden muss.
die if anweisung wird in c++ immer ausgeführt, wenn der ausdruck zwischen den klammern != 0 is.


Wenn ich mich jetzt nich irre, aber bei vergleiche sind gleich schnell. Warum? var alleine Hinterläst kein Status Flag im Flag Register der CPU. Es muss also ein Vergleich vorgenommen werden, da dieser ein Status Flag im Register hinterläst. Also ob ich nun geben true vergleich oder einfach gegen != NULL ist Wurscht.

Ich weis das es einen Bedingungslosen Jump Befehl gibt und das es einen Bedingten Jump Befehl gibt. Da hier mal eine Frage an alle die gut in Assembler für x86 CPU's sind. Damit if(var) schneller ist als if(var == true) brauch es einen Jump Befehl der als Argument einen Wert enthält "var". Wenn dieser Jump Befehl aber ebenfalls einen zweiten Wert verlangt, dann sind beide Varianten wieder gleich schnell.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

adapto

Treue Seele

Beiträge: 147

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

13

30.05.2004, 02:10

Quellcode

1
2
3
if( var )
cmp var, 1
je/jz wohinauchimmer


Quellcode

1
2
3
if( var == true )
cmp var, 1
je/jz wohinauchimmer


jump Befehle können keine werte enthalten sie haben nur eine Sprungadresse. Aber man kann mit JCXZ/JECXZ ECX direkt auswerten.

14

30.05.2004, 16:00

Zitat

jump Befehle können keine werte enthalten sie haben nur eine Sprungadresse.
Damit ist die Sache klar. Ob nun if(var) oder if(var == true/false) ist völlig schnuppe. Sowohl im Debug als auch im Release Modus.

Danke für die Aufklärung :)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

30.05.2004, 19:08

ob so, oder so.
die erklärung is plausibel.

ich weis auch, wo ich das mal aufgeschnappt hab...

da war ich noch ein kleiner unerfahrener VB anfänger.
und da vb ( mal abgesehen von einer nativen exe ) interpretiert wird, dürfte das evtl. auf vb zutreffen ( war mal ein tipp auf ActiveVB.de )

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

16

30.05.2004, 20:46

Um nochmal auf folgendes zurückzukommen:

Zitat

irgendwo im code am anfang einer funktion wenn das device benötigt wird:
"Local_lpDirect3DDevice = global_lpDirect3DDevice"


So super dumm find ich das gar nicht, klar ist es nicht "fein" aber wenn man die Gloable Varible in einer Funktion NICHT ändern will, aber deren Inhalt brauchst ist das ok. Natürlich sollte man beachten, das GLOBALE Varibalen auch von allen untergeordneten Blöcken verändert werden können sollten (man was für ein Deutch ;) ) sonst sollten sie nicht als GLOBAL deklariert sein. Da stimm ich euch voll und ganz zu. ;D

Anonymous

unregistriert

17

30.05.2004, 22:28

mal nebenbei:
da ich grad noch andere lokalen als globale variablen und umgedreht verschoben hab, is mir aufgefallen, dass globale variablen automatisch initialisiert werden. wie stell ich das auch für lokale ein?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

30.05.2004, 22:40

Also soweit ich weiss ist das Compilerabhängig. Manche Compiler haben "Default" Werte. So wie folgendes Beispiel:

Quellcode

1
2
int test;
printf("%d", test);


test hat dann einen Wert z.B. 0, das hängt aber vom Compiler ab. Bei vielen funktioniert das aber NICHT. So gibt z.B. VisualC++ spätestens bei der Ausführung einen Fehler aus.

Es gibt aber keinen Unterschied bei der Zuweisung der Werte bei gloablen und lokalen Variblen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

30.05.2004, 23:23

Zitat von »"koschka"«

So gibt z.B. VisualC++ spätestens bei der Ausführung einen Fehler aus.

Also, bei mir nicht!
Im Debug-Build eines Programms bekommen die Variablen meistens einen Standardwert von null. Im Release-Build behalten sie einfach den Wert, der gerade da im Speicher steht, der für sie reserviert wurde.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

20

30.05.2004, 23:47

Daher ist eine nicht eingenullte var der schrecken jedes Scheifelprogers...*sich an die 20 min suchzeit erinner*

Werbeanzeige