PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : austauschen von werten


Tilion
17.07.2002, 12:10
was mich als halb-laie mal interessieren würde:
es gibt ja mehrere möglichkeiten 2 werte von variablen (beide z.b. int) auszutauschen. ich persönlich finde ja, dass diese hier effizienter ist:

x += y;
y = x - y;
x -= y;

aber wenn ich mir fremden code mal anschaue, von leuten die eigentlich besser coden können als ich, seh ich meist die variante mit einer 3. variable.

j = x;
x = y;
y = j;


ich wollte eigentlich nur mal wissen, welche nachteile die 1. variante hat, dass sie so selten genutzt wird. hat sie nachteile, oder wird sie deshalb so selten benutzt, weil sie keinem einfällt? *g*


Jan Krüger
17.07.2002, 12:14
methode 1 ist rechenaufwändiger (zahlenoperationen wie additionen etc. brauchen mehr taktzyklen als einfaches wertzuweisen).
außerdem wird jeder vernünftige optimizer aus variante 2 *einen* assembler-befehl machen (XCHG a,b). warum es dem optimizer unnötig schwer machen?

Felix Kaiser
17.07.2002, 12:56
XCHG ist nicht auf Speicheradresse (sprich: Variablen) anwendbar ;)

Jan Krüger
17.07.2002, 12:58
doch, aber nur auf eine. du kannst sehr wohl den inhalt eines prozessorregisters mit einer speicheradresse vertauschen. und da die meisten optimizer auch die register benutzen, geht das dann recht gut. ;)

Felix Kaiser
17.07.2002, 13:02
Ja, ok, 2 aufeinanderfolgende XCHG... Nur ob das die alten C Compiler machen, glaub ich nich, zwecks abwärtskompatiblität wirds denke ich nicht supportet.

Jan Krüger
17.07.2002, 13:04
wer benutzt schon alte compiler...? :)
und wenn der optimizer registervariablen benutzt, ists nur ein xchg. :P

xOOn
17.07.2002, 13:12
also das macht keine 10 takte auf, und wenn wirndows 1000 takte brauch um nur nen mauszeiger mit dem scheiss schatten zu verschieben kommts darauf auch nciht mehr an, nur die 2 variante ich 100x leserlicher als die 1.

Jan Krüger
17.07.2002, 16:26
hehe... man könnte sich sogar ein kleines swap-makro basteln, dann isses noch besser lesbar... ;)

thos
17.07.2002, 20:01
@tilion

versuch mal mir deiner methode folgende variablen zu tauschen, dann weißt du wieso meistens die zweite methode gelehrt (erlernt) wird.

string s="vertausch";
string s1="mich";

:-)

Jan Krüger
18.07.2002, 00:59
nanana... das ist aber kein nativer datentyp ;)

achja @ xOOn: bei windows wird der schattierte mauszeiger hardwarebeschleunigt, der löwenanteil der rechenleistung geht also an die GPU. :)
und wenn die beiden unterschiedlichen varianten für ints tauschen in einer inner loop eines sehr komplexen algorithmus verwendet werden, merkt man den unterschied sehr wohl.