Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Rekursion - wie lokal sollten Konstanten deklariert werden?


Hidden - Do 17.04.08 20:32
Titel: Rekursion - wie lokal sollten Konstanten deklariert werden?
Hi,

In meinem Schachprogramm will ich eine KI einbauen; diese wird wohl rekursiv arbeiten und nun geht es mir um die Laufzeitoptimierung der einzelnen Schritte.

Ich habe mir überlegt, für einen kurzen Zugmustertest(grundlegende Validität des Zugfeldes) ein Array[Figurentypen(ohne Bauer), 0..7, 0..7] of Boolean anzulegen, welches mir diesen Check mit minimalem Rechenaufwand erledigt(zuerst hatte ich kurze Formeln).

Nun ist dieses Array aber 5 * 8 * 8 = 320 Werte und damit, wenn ich das mit dem "kein Zugriff auf Bits" richtig verstanden habe, 320 Byte, ein drittel KB, groß :?

Nun weiß ich nicht, wie der Compiler mit const arbeitet: Kopiert er die werte sowieso immer an die Stelle, wird zur Laufzeit eine Kopie erzeugt...

Letzteres wäre fatal, da dann bei jedem Durchlauf der Prozedur 320 Byte beschrieben würden. Insofern meine Frage: Wo muss ich diese Konstante deklarieren, um ein Optimum an Laufzeit zu erhalten? Zu Beginn der Unit(global), im implementation-Teil oder einfach in der Prozedur?

mfG,


BenBE - Do 17.04.08 20:59

Konstanten werden immer über data-Segment der Anwendung addressiert, sei denn, sie passen in ein CPU-Register und sind semantisch von der CPU direkt verarbeitbar. Ansonsten werden sie direkt im Compilat abgebildet.

Auf dem Stack wird eine Konstante nicht kopiert (sei denn, man schreibt ne explizite Zuweisung einer Variablen ...


Hidden - Do 17.04.08 21:05

Danke :D