Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.203 Beiträge
 
Delphi 12 Athens
 
#3

Re: Länge eines Strings vs. verbrauchter Speicherplatz

  Alt 14. Sep 2009, 03:19
Zitat:
length() bestimme, komme ich auf einen anderen Wert als dieser String später als Speicherplatz benötigt
Wie hast du denn diesen Speicherverbrauch bestimmt?



Es kommt erstmal auf die Delphi-Version an.
Ab Delphi 2009 ist jedes Zeichen 2 Byte lang ... eben Unicode

Bei Length('') sind grundsätzlich alle Strings 4 Byte, da sie nur aus dem internen NIL-Pointer bestehen. (abgesehn vom ShortString)

ShortString = 256 Byte = 1 LängenByte + 255 Zeichen
String[x] = x+1 Byte = 1 LängenByte + x Zeichen
String = SizeOf(Pointer) + 2 * SizeOf(Integer) + (Length(S) + 1) * SizeOf(Char)
AnsiString = SizeOf(Pointer) + 2 * SizeOf(Integer) + (Length(S) + 1) * SizeOf(AnsiChar)
UnicodeString = SizeOf(Pointer) + 2 * SizeOf(Integer) + (Length(S) + 1) * SizeOf(WideChar)
WideString = SizeOf(Pointer) + 1 * SizeOf(Integer) + (Length(S) + 1) * SizeOf(WideChar)

Ansi-/UnicodeString = internerZeiger + LängenAngabe + Referenzzähler + (Länge + abschließende#0) * Zeichengröße


Dazu kommt dann noch die Defragmentierung des jeweiligen SpeicherManagers und dessen Verwaltungsdaten
(der WideString wird von der OLE32 verwaltet ... z.B. SysAllocStringLen aus OleAut32.dll)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat