Re: Konstanten und Geschwindigkeit

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Zusatz, da sich das letzte posting irgendwie
verselbständigt hatte:


> Es gibt also Konstanten, die nur scheinbar Konstanten sind und zu
> ihrem Zweck für jede Nutzung "geklont" werden, und Konstanten, die
> direkt in die Codeerzeugung mit einfließen können, was aber nur
> integer-werte sind. Geklont wird auf jeden Fall auch dann, wenn eine
> Funktion eine Referenz (Pointer/Zeiger) erwartet, der Klon wird nach
> dem Funktionsaufruf natürlich verworfen.

Weiß man, daß die Funktionen die mittels Pointer referenzierten
(non-integer-) Variablen/Stings/etc. nicht antasten, kann man natürlich
Zeit einsparen, indem man auf Konstanten verzichtet, denn dann entfällt
das cloning.

> Die letzten zwei Zeilen (*3,*4) sind direkte Konstantenzuweisungen an
> Variablen, hier ist der Wert der Konstante direkt Bestandteil der
> asm-Anweisung, befindet sich also direkt im Code gespeichert. Das
> Einlesen in die CPU-Register erfordert in diesem Fall keinen
> zusätzlichen Speicherzugriff.

amit sind integer-Konstanten also tatsächlich deutlich "schneller" als
entsprechende Variablen.

String und Co. interessiert das jedoch wenig, da diese außerhalb des
code- und Datensegments gespeichert werden (bzw. deren Daten). Es dürfte
daher keinen großen Performanceunterschied machen, ob ein String als
Variable oder Konstante deklariert wird. Für diese Daten sieht das
PE-File-Format (portable executable) eigene Sections vor, so daß die
Daten vermutlich direkt an festgelegten Speicherpositionen abgelegt
sind. Vor jedem Zugriff wird dann aber "geklont" :-)


Viele Grüße,
Andreas

.



Relevant Pages