Hallo!
Ich schau erstmal, ob ich dein Problem richtig verstanden habe:
-Du hast verschiedene Recordtypen, die auch unterschiedliche Größen haben.
-Diese unterschiedlichenRecords sollen alle in eine Liste (also TList-Nachfahre oder etwas ähnliches) und auch von nur einer Liste aus erstellt werden.
-Du willst beim Füllen der Liste bzw. beim Erstellen der unterschiedlichen Records Speicheralloziierungen auf ein Minimum beschränken.
-Du hast den vorherigen Punkt bereits für eine Liste mit ein und demselben Recordtyp erledigt, die Methode soll also für unterschiedliche Recordtypen funktionieren.
Dem entnehme ich, daß du also in dieser Liste für einen Recordtypen am Anfang Speicher reservierst und diesen dann nach Gutdünken für deine Records aufteilst. Damit wiederholst du das, was der Delphi-Speicher-Manager bereits für dich tut. Nicht jeder Aufruf von New bzw. GetMem wird automatisch an das Betriebssystem durchgeschleusst, stattdessen teilt dir das Programm unter Umständen Speicher zu, den du gerade zuvor wieder freigegeben hast. Aus diesem Grunde relativieren sich häufig auch Aussagen wie "Objekte instanziieren / Getmem (New) aufrufen dauert zu lange" .
Nichts destotrotz:
Um den Speicher zuzuteilen, hast du ja einen Pointer, der auf den einmalig zugewiesenen Speicherbereich zeigt, und wahrscheinlich eine Art Offset, an dem du erkennst, wieviel du bereits von dem Speicher für die Einträge in der Liste verbraten hast. Bei ein und demselben Recordtyp wird der Offset natürlich immer um dieselbe Anzahl nach oben geschraubt. Für unterschiedliche Records musst du dann natürlich diesen Offset auch um unterschiedliche Anzahl Bytes erhöhen. Ausserdem benötigst du ein Identifikationsmerkmal, an dem du erkennst, um was für einen Record es sich handelt. Wenn du unter 257 Recordtypen hast, reicht ein Byte als ID.
Cu,
Udontknow