Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Kapazität von String-Listen und Strings
RinoPisetta - Mo 23.02.09 19:28
Titel: Kapazität von String-Listen und Strings
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
Christian S.: Topic aus Dateizugriff verschoben am Mo 23.02.2009 um 18:29
Yogu - Mo 23.02.09 19:49
RinoPisetta hat folgendes geschrieben : |
| 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.
RinoPisetta hat folgendes geschrieben : |
| 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.
RinoPisetta hat folgendes geschrieben : |
| Gilt hier die alte Pascal-Beschränkung von 255 Zeichen? |
Die garantiert nicht.
jaenicke - 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 - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!