AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherbedarf von TStringList

Ein Thema von DevilsCamp · begonnen am 18. Feb 2005 · letzter Beitrag vom 18. Feb 2005
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Speicherbedarf von TStringList

  Alt 18. Feb 2005, 10:15
Weiß einer von euch, wie ich den gesamten Speicherbedarf einer gefüllten TStringList bekomme?

mit:
speicher := Length(StringList1.Text)+SizeOf(TStringList) ???


Oder anders?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Speicherbedarf von TStringList

  Alt 18. Feb 2005, 10:29
Das wird schwierig. Ein Objekt vom Typ TStringList belegt zunächst einmal TStringList.InstanceSize Bytes an Speicher, dieser Wert ist konstant. Dabei sind Zeiger auf die Objekt- und Stringlisten, die wiederum Speicher einnehmen. Die Elemente in der Objektliste können wiederum Zeiger auf andere Speicherbereiche haben usw...

Für den allgmeinen Fall lässt sich diese Frage also nicht genau beantworten.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#3

Re: Speicherbedarf von TStringList

  Alt 18. Feb 2005, 10:32
das ist doof.


Ich habe nämlich folgenden Code:
Delphi-Quellcode:
var
stlarr : array of TStringList;
und würde gerne wissen, wieviel Speicher das ganze verbraucht um evtl. eine Optimierung vornehmen zu können...


<edit>
in der StringList werden immer nur Strings vom Typ String[12] gespeichert...
</edit>
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Speicherbedarf von TStringList

  Alt 18. Feb 2005, 11:38
dann nimm doch ein Array of Array of String[12], das ist vermutlich

4 Byte (für den Zeiger auf das Array) + 4 Byte für die Arraylänge + 13 Byte für jeden der Strings (12 Zeichen + 1 Längenbyte, da Shortstring)

das würde dann wohl so berechnet?
Delphi-Quellcode:
Groesse := 8;
for i := Low(ARRAY) to High(ARRAY) do
  Inc(Groesse, 8 + 13 * Length(ARRAY[i]));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Speicherbedarf von TStringList

  Alt 18. Feb 2005, 11:43
Zitat von DevilsCamp:
und würde gerne wissen, wieviel Speicher das ganze verbraucht um evtl. eine Optimierung vornehmen zu können...
Length(stlarr) * SizeOf(Pointer) + 8

Wobei aber der von TStringList reservierte Speicher nicht eingerechnet ist, da dein Array bis jetzt nur "NIL" enthält.

Zitat:
in der StringList werden immer nur Strings vom Typ String[12] gespeichert...
Das interessiert die StringList nicht. Die hält ihre Daten in einem AnsiString und der ist dynamisch. AnsiString braucht immer 4 Byte (Zeiger) und dann je nach Inhalt zusätzlich 0 Byte (Leerstring) oder 9 Byte (1 Zeichen) bis 2GB (Userspace-Adressraum-Ende).

Um den benötigten Speicher zu ermitteln könnte man so vorgehen:
Delphi-Quellcode:
Size := List.InstanceSize;
Inc(Size, List.Capacity * 8) // record für jedes Item (Objects[] + Strings[])
for i := 0 to List.Count - 1 do
  if List[i] <> 'then
    Inc(Size, 8 + Length(List[i]));
Das muss aber nicht vollständig sein.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#6

Re: Speicherbedarf von TStringList

  Alt 18. Feb 2005, 12:03
Zitat von jbg:
Zitat:
in der StringList werden immer nur Strings vom Typ String[12] gespeichert...
Das interessiert die StringList nicht. Die hält ihre Daten in einem AnsiString und der ist dynamisch. AnsiString braucht immer 4 Byte (Zeiger) und dann je nach Inhalt zusätzlich 0 Byte (Leerstring) oder 9 Byte (1 Zeichen) bis 2GB (Userspace-Adressraum-Ende).
Das habe ich jetzt nur erwähnt in er Hoffnung, dass evtl. ein entscheidender Hinweis kommt, wie man es besser machen könnte
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz