Pointer in Array aus Bytes speichern
Verfasst: 23.01.2013 23:06
Hallo, ich arbeite grad dran, eine die Ausführung einer Skriptsprache mit Purebasic umzusetzen, und das so schnell wie nur möglich.
Da hab ich mir gedacht ich übersetz den Skript in eine Art Bytecode (mit selbstausgedachtem Aufbau) und damit bei den Bedingungen der Zugriff auf die beiden verglichenen Werte möglichst schnell ist, wollte ich direkt mit Pointern drauf zugreifen, also die Pointer auf die Variablen einfach in den Bytecode schreiben.
Und so hätte ich nen Pointer als Integer in den Array gespeichert. Hab mal gehört, dass Arrays zusammenhängende Speicherbereiche sind, und bin daher auf folgende Idee für das Speichern gekommen. Funktioniert ... aber wahrscheinlich nicht der beste Weg für sowas.
Andererseits hab ich mal gehört, dass Integer nicht wirklich für das Speichern von Pointern geeignet sind.
Hat vielleicht jemand ne bessere Idee?
Weiter überlegt hab ich, dass die Pointer auch auf Funktionen zeigen könnten, die dann Ausgeführt werden und deren Rückgabewert dann verglichen wird. Naja eigentlich wollte ich einfach mal eure Kommentare zu der Methode hören. mfg daniel 
Da hab ich mir gedacht ich übersetz den Skript in eine Art Bytecode (mit selbstausgedachtem Aufbau) und damit bei den Bedingungen der Zugriff auf die beiden verglichenen Werte möglichst schnell ist, wollte ich direkt mit Pointern drauf zugreifen, also die Pointer auf die Variablen einfach in den Bytecode schreiben.
Und so hätte ich nen Pointer als Integer in den Array gespeichert. Hab mal gehört, dass Arrays zusammenhängende Speicherbereiche sind, und bin daher auf folgende Idee für das Speichern gekommen. Funktioniert ... aber wahrscheinlich nicht der beste Weg für sowas.
Andererseits hab ich mal gehört, dass Integer nicht wirklich für das Speichern von Pointern geeignet sind.
Hat vielleicht jemand ne bessere Idee?
Code: Alles auswählen
; Array, eigentlich aus Bytes
Dim blub.a(10)
; Die Bytes 3 bis 6 speichern den Pointer...
pos = 3
; Wert des Integers, soll dann später als pointer funktionieren
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
x.i = 1234567890
CompilerElse
x.i = 12345678904321
CompilerEndIf
Debug x
; Reinschreiben
PokeI(@blub(pos), x)
; Überprüfen
Debug PeekI(@blub(pos))
; ... so sieht der Array in Bytes aus
Debug "----"
For foo = 0 To 9
Debug blub(foo)
Next