Einzelnen Beitrag anzeigen

Benutzerbild von olee
olee

Registriert seit: 16. Feb 2008
Ort: Boppard
540 Beiträge
 
Turbo Delphi für Win32
 
#103

Re: RUTIS Engine (Scripting) [WinCE spinnt]

  Alt 7. Mai 2010, 21:00
Mein Stack hat eine halb-feste Größe.

Während der Ausführung reserviert meine Stack-Class Speicherblöcke mit einer
beim Erstellen des Stacks vorgegebenen Blockgröße.

Deswegen muss eine Adresse (als Pointer) auf eine Variable im Stack auch über die Array-Property
Data[<Stack-Adresse>] ausgewertet werden.
Diese Funktion prüft, auf welchem Stack-Block die gewünchte Adresse liegt
und gibt das entsprechende Ergebnis zurück.

Aber dieses unaligned_Keyword scheint genau das zu sein, was ich brauchte.

Ich werde dennoch (der Geschwindigkeit wegen) versuchen, die Variablen weitestgehend am Raster auszurichten.

Es stellt sich mir jetzt nur die Frage, was schneller ist:

Entweder immer mit unaligned auf die Werte zugreifen, oder vorher eine Prüfung durchführen, ob die Variable auf dem Raster liegt und dem entsprechend unaligned verwenden oder nicht.

Ich schätze aber 1. ist schneller, da unaligned bei schon ausgerichteten Werten wohl nix macht.

EDIT:
VERDAMMT ich glaubs nicht!
Das funktioniert so wirklich!!!!
VIELEN DANK das war eine große Hilfe!!

Ich werde nun mal sehen wie ich das auf die Reihe krige.
Am meisten Kopfschmerzen bereitet mir nun die Frage, wie ich das nutzen kann, ohne das sich das Projekt nicht mehr mit Borland-Delphi kompilieren lässt.
{$Ifdef WinCe} überall einzubauen wäre eine riesige Arbeit.
Vielleicht ließe sich ja sowas mit einer Funktion realisieren, die sich je nach WinCe oder nicht-WinCe unterscheidet.
Gibt es da nicht auch so was wie Inline-Funktionen, sodass ich das ganze nutzen kann, ohne eine Menge calls?
Leider kenne ich mich mit diesem inline nicht aus.

EDIT-2:
Mir ist gerade aufgefallen, das das doch einigermaßen geht:
Indem ich das so schreibe:
Delphi-Quellcode:
  {$ifdef WinCE}unaligned{$endif}(PCardinal(@Data[adr])^) := val;
  unaligned(PCardinal(@Data[adr])^) := val; //So sähe es mit WinCe aus -> lässt sich kompilieren
  (PCardinal(@Data[adr])^) := val; //So sähe es ohne WinCe aus -> die Klammern stören Delphi ja nicht
Das solle nicht dermaßen viel arbeit sein.

MFG und VIELEN DANK für die Hilfe (vor allem @Poelser)
Björn Zeutzheim
Codename: Performancepumpe
  Mit Zitat antworten Zitat