Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Speicher manuell reservieren


[r2d2] - Di 28.10.03 03:45
Titel: Speicher manuell reservieren
Hi
Wie kann man den Platz für eine Variable selbst reservieren¿ Normalerweise reserviert den Delphi ja beim Programmstart automatisch, das will ich aber nicht, ich will ihn wärend der laufzeit reservieren. Mir fällt als einzige Lösung ein, eine array-Variable mit variabler Länge zu erstellen, die nimmt ja erst dann Platz ein, wenn ihre Länge festgelegt wird. Es muss aber doch eine bessere Lösung geben.
thx :roll:


Delete - Di 28.10.03 06:10

Warum willst du das nicht?

Einzige Möglichkeit, die ich sehe, wäre selber einen Speichermanager zu schreiben. Viel Spaß.

Das was du geschrieben hast, gilt übrigens nur für globale Variablen. Da man mit selbigen eh sehr sparsam umgehen sollte, vermeiden wo es nur geht, sehe ich eigentlich kein Problem, dass sie unnötig Speicher brauchen.
Lokale Variablen belegen nur Speicher, wenn das Unterprogramm aufgerufen wird und verschwinden wieder aus ihm, wenn das Unterprogramm verlassen wird.


Motzi - Di 28.10.03 09:05

Für sowas was du meinst verwendet man normalerweise Pointer - ist in der Regel nur sinnvoll wenn man dyn. Speicher allozieren will weil erst zur Laufzeit feststeht wieviel Speicher benötigt wird. Schau dir vielleicht mal mein Pointer-Tutorial auf http://www.x-spy.net/personal an...


[r2d2] - Di 28.10.03 13:56

Ich hab ein 500*500*500-Array, von dem aber nur einige wenige Felder Daten enthalten. Selbst wenn alle Felder nur vom Typ Pointer sind, belegen sie ja aber schon Speicher, und zwar nicht zu knapp. Ich will also erreichen, dass nur die Felder Speicherplatz belegen, die auch wirklich Daten enthalten. Mit einem dynamischen Array müsste das doch gehen, oder?


G-man - Di 28.10.03 17:21

Also, wenn du ein Problem mit dem Belegen von Speicher hast, kannste das auch mit Assembler lösen. Ist sowieso efektiver.


Klabautermann - Di 28.10.03 17:53

In deinem Fall würde ich mir einer Verketteten Liste (oder vom nir aus auch einem Dynamischen Array) Abreiten und nur für die Elemente, welche Datensätze anlegen.

Ein Datansatz müsste dan inetwa so aussehen:

Delphi-Quelltext
1:
2:
3:
4:
tMyData=Record
  x, y, z : Word;
  Nutzdaten : String;
end;


Wenn du dann z.B. 5 Solcher Datensätze hast, dan erzeugst du ein DynArray mit 5 Feldern von den oben genanten Typ.

Gruß
Klabautermann