Autor Beitrag
RinoPisetta
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 23.02.09 19:28 
Hallo,

ein paar Fragen zu Strings und String-Listen:

Wie viele einzelne Strings kann ein TStringList-Objekt in TurboDelphi maximal aufnehmen?
Oder gibt es, was die reine Anzahl der Strings betrifft, nach oben keine Beschränkung?
Und wie lang dürfen die einzelnen Strings in einem TStringList-Objekt maximal sein?
Gilt hier die alte Pascal-Beschränkung von 255 Zeichen?

Rino


Moderiert von user profile iconChristian S.: Topic aus Dateizugriff verschoben am Mo 23.02.2009 um 18:29
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 23.02.09 19:49 
user profile iconRinoPisetta hat folgendes geschrieben Zum zitierten Posting springen:
Wie viele einzelne Strings kann ein TStringList-Objekt in TurboDelphi maximal aufnehmen?

Na - ich würde sagen, High(Integer), da Count ein Integer ist, oder? Also 2^31 (Integers sind signiert), entspricht 2147483648.

user profile iconRinoPisetta hat folgendes geschrieben Zum zitierten Posting springen:
Und wie lang dürfen die einzelnen Strings in einem TStringList-Objekt maximal sein?

Da bin ich mir nicht so ganz sicher, aber da Strings (meines Wissens nach) Nullterminiert sind, müsste alles unter 2GB erlaubt sein, also 2199023255552 Zeichen.

user profile iconRinoPisetta hat folgendes geschrieben Zum zitierten Posting springen:
Gilt hier die alte Pascal-Beschränkung von 255 Zeichen?

Die garantiert nicht.


Zuletzt bearbeitet von Yogu am Mo 23.02.09 19:54, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 23.02.09 19:49 
Theoretisch gibt es da keine (realistisch auftretenden) festen Beschränkungen. Praktisch wären bei größeren Datenmengen evtl. andere Lösungen vorzuziehen. Eine TStringList wird komplett in den Arbeitsspeicher geladen, und vor allem dadurch ist die Größe begrenzt.

Wenn es zum Beispiel um eine sequenzielle Dateibearbeitung geht, dann wäre eine TStringList nur für kleine Dateien sinnvoll.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 23.02.09 20:01 
Count <= High(Integer) ist die eine Beschränkung (ansonsten gibt's EIntOverflow bei Overflow Checking). Enthält die Liste nur leere Strings, so bräuchte die Liste selbst aber Count*SizeOf(TStringItem) Bytes zusammenhängenden, adressierbaren Speicher. Hier sind rein theoretisch die ersten 64K gesperrt und je nach Compilereinstellung und Betriebssystemeinstellung die obersten 2 GB. Mit {$SetPEFlags $20} und mit 3GB Switch die obersten 1 GB. Aber praktisch wirst du niemals so viel zusammenhängenden Speicher finden. Und wenn du nicht-leere Strings speicherst, brauchen die selbst natürlich auch Platz. Die harte obere Grenze ist also High(Integer), die weiche Grenze hängt von der Systemkonfiguration und dem Inhalt der Liste ab.