Interne Variablen per Adresse überschreiben

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

klin

Betreff: Interne Variablen per Adresse überschreiben

BeitragSo, Okt 10, 2010 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute,
ich bin dabei eine Skript sprache zu machen die sich kompilieren lässt. Soweit sogut, denn ich arbeite auch schon seit einer Woche daran.
Aber leider habe ich es mit den Variablen schlecht geregelt: Alles in eriner Liste und per For durchlaufen lassen >.o

Das blöde dabei ist, dass es nach ca. 100 Variablen ein wenig langsamer wird... Und somit kam ich auf eine Idee!
Ich kenne das von C++ (Detour), dass man per Adresse die Variable Klonen kann (A = *Adresse oder so..) und dann überschreiben kann. Das würde mir zumindest eine For schleife ersparen. Die Adressen kann ich ja bei dem Laden des Skriptes einsetzen.
Allerdings, weiß ich leider nicht wie man das tut... Ich weiß zwar wie man diese hausbekommt, aber leider nicht wie man diese auch setzen kann Sad

Hat da jemand eine Lösung?

THX
MFG
Klin
 

BBPro2

BeitragSo, Okt 10, 2010 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
anderer vorschlag:

sortiere die variablennamen nach dem alphabet und führe binäre suche auf die liste aus
das vermindert die laufzeit von O(n) auf O(log n) - ist also erst bei 2^100 variablen so "langsam" wie zur zeit bei 100

BtbN

BeitragSo, Okt 10, 2010 2:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur das der Grundaufwand so viel höher wird, dass er vermutlich für 10 variablen so lange braucht wie jetzt für 1000.
Verstehe eh den Sinn der Liste nicht so ganz. Wie weit wird das denn kompiliert? Und warum die vars nicht einfach nummerieren, und nen Array nehmen?
 

BBPro2

BeitragSo, Okt 10, 2010 5:11
Antworten mit Zitat
Benutzer-Profile anzeigen
das kommt ganz drauf an wie sein bisheriger code aufgebaut ist btbn und muss absolut nicht zwangsläufig so sein...
ich bezweifle stark, dass er für 10 vars so lange bräuchte wie jetzt für 1000^^

der aufwand muss wenn der code bisher vernünftig ist überhaupt nicht steigen...
alles was er "mehr" machen muss ist das alphabetische einordnen der neuen variable beim erstellen.
das hat auch ne laufzeit von O (log n)
ich seh also nich ganz wo das problem sein soll...

mpmxyz

BeitragSo, Okt 10, 2010 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
klin, ordnest du Strings Variablen zu?
Dann kannst du direkt TMap-Objekte nutzen.
Bei diesen braucht auch das Einsortieren nur O(log(n)).
Hier mal eine kleine Liste, wie man sie verwendet:
Code: [AUSKLAPPEN]
Erstellen: map:TMap=New TMap
Einfügen: map.Insert(schluessel,wert)
Wert bestimmen: wert=map.ValueForKey(schluessel)
Wert löschen: map.Remove(schluessel)
Map leeren: map.Clear()

mfG
mpmxyz
PS: Man kann übrigens in einer "Map" jeder Art von Objekten Objekte zuordnen.
PPS: Pointer auf Variablen bekommt man mit "Varptr". Pointer werden mit "Ptr" gekennzeichnet. (z.B. "Int Ptr")
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

klin

BeitragSo, Okt 10, 2010 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank an alle! Ich werde mal die TMap methode ausprobieren.

BtbN: Ich habe das Skript in einer ->ART<- "Assembler" code umgewandelt. Somit muss das Programm nur Die befehle durchlaufen lassen und benötigt kaum IF/find(instr) abfragen usw. Das macht es natürlich um einiges schneller! momentan hatte ich ~2000 FPS. Nun sind es aber bei 100 Variablen ~1000 FPS Sad Wusste aber auch nicht, dass es so schwer sein kann Wink

THX
MFG
Klin
 

Macintosh

BeitragSo, Okt 10, 2010 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
öhm du misst dein script in fps? ich würde es eher in millisec angeben, bzw. messen wie viele msec ein befehl braucht, oder dans ganze script braucht.

Zum Thema:
Ich denke auch das TMap hier wohl das beste ist.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group