AGB  ·  Datenschutz  ·  Impressum  







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

String/Shortstring Speicherbedarf

Ein Thema von skyware · begonnen am 14. Mär 2005 · letzter Beitrag vom 14. Mär 2005
Antwort Antwort
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#1

String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 10:31
Hallo zusammen,

ich hätt da mal ne Frage Betreff Speicherbedarf von Strings.
Ein normaler String hat ja 2^31 Stellen, hingegen der Shortstring nur 255.
Wie wirkt sich das jetzt im effektiven Speicherverbrauch im Memory aus?
Sprich wieviel KB kann ich pro anders definierte Variabel sparen?
(bei z.B. 100 Klassenvariabeln an String oder Shortstring)

Hab da irgendwie nen Knoten
  Mit Zitat antworten Zitat
Blechwolf

Registriert seit: 9. Sep 2003
Ort: Aachen
126 Beiträge
 
Delphi 7 Professional
 
#2

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 10:38
Der Unterschied ist der folgende:

Beim Shortstring werden auf jedem Fall die 255 Stellen reserviert.
Beim String hingegen werden nur soviele Stellen reserviert wie lang Dein String wirklich ist (+1 für die Terminierung mit #0)

Und jetzt kannst Du anfangen zu rechen...
Strings sind normalerweise die günstigere Variante.

Grüße

Wolf
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (engl. Sprichwort)
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 10:44
Hmm...das würde also bedeuten das es überhaupt keinen Grund
gäbe eine Variable als ShortString zu definieren???
Es muss doch einen Unterschied geben...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 10:45
Na ja, wenn man ShortString verwendet werden wohl die bekannten 256 Byte (1 LängenByte und 255 für die Zeichen) verbraucht.

Wenn man aber den "ShortString folgender Maßen definiert, dann ist Speicherverbrauch = Zeichenanzahl + 1
Var S: String[Länge];
Bei String/AnsiString Zeichenanzahl + 12 Byte (ja 4 Byte für Referenzzähler, Längenangabe und Pointer auf die Stringdaten) belegt.


Und bei allem kommt ja dann nochmal der Pointer (wieder 4 Byte) auf den Speicherbereich, wo die Daten liegen, dazu
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Blechwolf

Registriert seit: 9. Sep 2003
Ort: Aachen
126 Beiträge
 
Delphi 7 Professional
 
#5

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 10:54
Shortstrings sind aus Nostalgie-Gründen vorhanden ;o) - In Turbo Pascal gab es nix anderes...
Naja, das ist mit Sicherheit nicht der Hauptgrund. Wenn es um File I/O geht mit Readln und Writeln und so, dann kannst Du (zumindest war es irgendwann mal nicht anders möglich) nur mit ShortStrings arbeiten.

Versuch mal ein File of String zu deklarieren
(OK, dafür gibts noch TextFile und eigentlich soll man ja mit Streams arbeiten...)

Grüße

Wolf
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (engl. Sprichwort)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 11:29
Zitat von Blechwolf:
Shortstrings sind aus Nostalgie-Gründen vorhanden ;o)
Schau mal in deine EXEn rein ... die ResourceStrings und die hardgecodeten Strings sind alles ShortStrings ... außerdem machen sich ShortStrings in Record's ganz gut (wenn man die gemaue/maximale Stringlänge kennt)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Blechwolf

Registriert seit: 9. Sep 2003
Ort: Aachen
126 Beiträge
 
Delphi 7 Professional
 
#7

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 11:43
Zitat von Blechwolf:
Naja, das ist mit Sicherheit nicht der Hauptgrund.
Ich liebe es wenn Sachen aus dem Zusammenhang geholt werden...
Aber gut jetzt. Mit Engeln fängt man besser keinen Grabenkrieg an.

Grüße

Wolf
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (engl. Sprichwort)
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 11:48
ok hoffe ich habe Euch jetzt korrekt verstanden..
das Fazit wäre also wenn möglich Strings mit klarer Längenangabe
verwenden um den Speicher möglichst Effizient zu gebrauchen.
z.B. String4 = string[4]
Und Shortstring wenn möglich nicht mehr verwenden da dies ein
Ueberbleibsel ist.
Seh ich das nun korrekt?
  Mit Zitat antworten Zitat
14. Mär 2005, 11:58
Dieses Thema wurde von "Sharky" von "Tutorials und Kurse" nach "Object-Pascal / Delphi-Language" verschoben.
In Tutorials und Kurse bitte keine Fragen posten.
Danke
Benutzerbild von himitsu
himitsu

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

Re: String/Shortstring Speicherbedarf

  Alt 14. Mär 2005, 12:02
Na ja, am efizientesten ist String/AnsiString, da dort mehrere Strings den Selben Speicherbereich belegen können, außerdem passen in String/AnsiString auch mal mehr als nur 255 Zeichen rein.

String[4] ist auch ein ShortString, nur halt mit der "maximalen" Länge von 4 Zeichen.

In Records ist der ShortString deßhalb gut, weil der Speicherbereich für die Zeichen direkt innerhalb des RecordSpeicherbereichs liegt, wobei bei String/AnsiString ja die Zeichen irgendwo anders rumliegen und nur der Zeiger auf diese Zeichen im Record abgelegt ist.

man kann also bei ShortString mit
Delphi-Quellcode:
Var R: Record ...

ZeroMemory(@R, SizeOf(R));
einen Record löschen/zurücksetzen(auf 0 setzen), was bei einem String/AnsiString nicht möglich wäre, da dort ja nur der Zeiger, aber nicht die Daten gelöscht werden.

außerdem kann beim ShortString ja auch der Record ganz einfach gespeichert/kopiert werden ... bei den anderen Strings hat man dort immer das "Problem" mit den Zeigern...


[add]
schau mal beim Luckie ( www.luckie-online.de ) nach, dort gibt es (glaub ich) ein String-Tutorial.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 21:40 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