Zitat von
Dax:
Mit const behandelt der Compiler die Parameter wie Zeiger, also müssen die paar Ints definitiv auf den Stack. Sonst könnte ja auch kein Zeiger darauf übergeben werden... was aber unnötig ist, da Ints sowieso keine Referenztypen sind.
Das ist so nicht ganz richtig. Einfache Daten (Boolean, Integer,...) werden auch bei Verwendung der Direktive
const in Registern übergeben, sofern freie Register zur Verfügung stehen und die Routine nicht mit einer Direktive wie
cdecl gekennzeichnet wurde. Die letzte Entscheidung trifft der Compiler, und ihm kann man es durch
const ermöglichen, Optimierungen vorzunehmen. Der Compiler kann dann - wie übrigens der Programmierer auch - sicher sein, dass die betreffende Variable während der gesamten Laufzeit der Routine den übergebenen Wert enthält. Ohne
const besteht die Gefahr, dass die Variable (vielleicht unbeabsichtigt) verändert wird. Bei einer späteren Modifikation des Codes übersieht man dies und nimmt an, dass sich noch der übergebene Wert darin befindet...
Das von dir angesprochene Zeigerproblem ist eigentlich gar keins. Wenn der Compiler feststellt, dass Zeiger auf die (in Registern übergebenen) Daten benötigt werden, erzeugt er für die
aufgerufene Routine einen Initialisierungscode, der die Werte auf dem Stack ablegt.
Gruß Hawkeye