Thema: Delphi StrAlloc verstehen

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.119 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 16:40
Moin Michael,

der Inhalt eines "normalen" Strings in Delphi beginnt bei der Adresse, die die Funktion zurückliefert.
Davor liegen dann noch 4 Byte (als Cardinal) Länge (und davor noch 4 Byte Referenzcount. Wo sind die eigentlich )

Delphi-Quellcode:
  // Platz schaffen für die Länge des zu reservierenden Strings
  Inc(Size, SizeOf(Cardinal));
  // Speicher reservieren für Länge und Inhalt
  // Result enthält jetzt die Adresse des reservierten Speichers
  GetMem(Result, Size);
  // An dieser Stelle wird jetzt die Länge gespeichert
  // Durch das ^ wird dereferenziert, also an die Adresse geschrieben, auf die Result zeigt.
  // Durch Cardinal() wird dann ein Type-Cast durchgeführt, damit man auch Size dorthin schreiben kann,
  // was der Compiler sonst unterbinden würde
  Cardinal(Pointer(Result)^) := Size;
  // Jetzt wird Result auf den Anfang des Inhaltes gesetzt
  // Die Länge steht also auf Result - 4
  Inc(Result, SizeOf(Cardinal));
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat