Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Länge eines Strings vs. verbrauchter Speicherplatz

  Alt 14. Sep 2009, 04: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)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat