AGB  ·  Datenschutz  ·  Impressum  







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

size of string?

Ein Thema von SirThornberry · begonnen am 17. Nov 2003 · letzter Beitrag vom 18. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

size of string?

  Alt 17. Nov 2003, 20:45
ich habe einen record und davon einen Pointertyp
Delphi-Quellcode:
  TDaten = record
    von: String;
    an: String;
  end;
  PDaten = ^TDaten;
jetzt habe ich die befürchtung wenn ich mit new(PDatenvariable) arbeite das es zu einem fehler in der Speicherreservierung kommt da ja String keine feste größe hat wie ein Integer oder lieg ich da falsch?? Wie viel zeischen kann ich dann in "von" bzw "an" schreiben wenn ich den speicher mit "new" angefordert hab?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: size of string?

  Alt 17. Nov 2003, 20:55
Hi,
wenn du die genaue Größe eines Strings angibst, so hat er immer das Maximum. Somit dürfte es - meiner Meinung nach - keine Probleme geben. Ganz sicher bin ich mir aber auch nicht, da ich es jetzt nicht getestet habe.

Chris
  Mit Zitat antworten Zitat
Chewie

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

Re: size of string?

  Alt 17. Nov 2003, 20:58
Eine Variable vom Typ "String" ist nur ein Zeiger und dementsprechend 4 Byte groß.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: size of string?

  Alt 17. Nov 2003, 21:02
also kann ich dann in den String dann fast unbegrenzt schreiben. Was passiert dann aber wenn ich dispose(Zeigervariable) mache, wird dann der speicher wo der String hinzeigt mit freigegeben?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Chewie

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

Re: size of string?

  Alt 17. Nov 2003, 21:06
Hmm, weiß nicht genau, ob er dann freigegeben wird. Um sicher zu gehen, benutz zum Freigeben Finalize.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von HAF4ever
HAF4ever

Registriert seit: 31. Okt 2003
Ort: Enns - Österreich
37 Beiträge
 
#6

Re: size of string?

  Alt 17. Nov 2003, 22:19
beim String kann man doch die Länge angeben.
var s: String[10]; hat zum beispiel die länge 10, also auch 10 Byte
wenn man aber keine Länge angibt ...
ist sie 255 (glaube ich)
  Mit Zitat antworten Zitat
Chewie

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

Re: size of string?

  Alt 17. Nov 2003, 22:26
@HAF4ever: So ähnlich...

Es gibt zwei verschieden Typen Strings: Shortstrings und Hugestrings. Shortstrings können eine Länge zw. 1 und 255 haben, die in eckigen Klammern angegeben wird. Anstatt String[255] kann man auch Shortstring schreiben. Diese Strings sind einfache Array of Chars, an der Stelle 0 wird die Länge gespeichert, anschließend die Zeichen.

Anders sieht das bei Strings aus. Eine Variable vom Typ String stellt einen Zeiger auf eine String-Struktur dar, die so aussieht, dass zunächst ein 4 Byte großer Referenzzähler, gefolgt von einer 4 Byte großen Längenangabe gespeichert wird. Dahintendran stehen die Zeichen, terminiert von einer 0.

Während Shortstrings also problemlos in dyn. Records verwendet werden können, ist die Verwendung von Hugestrings mit Vorsicht zu genießen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: size of string?

  Alt 17. Nov 2003, 22:27
falsch, wenn man keine länger angibt kann man mehr reinschmeißen, weiß allerdings nicht wieviel, hatte bisher noch nie die grenze erreischt selbst wenn ich eine komplette datei eingelesen hab die 10 mb oder so groß war
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Chewie

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

Re: size of string?

  Alt 17. Nov 2003, 22:31
Ein String kann bis zu 2^31 - 1 Zeichen speichern, also etwa 2,1 Milliarden (2 Gigabyte). Vorausgesetzt, du hast dazu genug virtuellen Speicher
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: size of string?

  Alt 17. Nov 2003, 22:31
String ist in Delphi als normaler Weise AnsiString. (4 LängenByte's + Daten = 4 Byte bis 2 GB)
OH:
Zitat:
Das reservierte Wort string funktioniert wie ein generischer Typbezeichner:

var S: string;

Hier wird beispielsweise die Variable S für einen String erstellt. Im voreingestellten Status {$H+} interpretiert der Compiler string als AnsiString (wenn auf das reservierte Wort keine Zahl in eckigen Klammern folgt). Bei Verwendung der Direktive {$H–} wird string als ShortString interpretiert.
String[X] = ShortString (1 LängenByte + 1 bis 255 Byte = 2 bis 256 Byte)


Add:
Zitat von Chewie:
Ein String kann bis zu 2^31 - 1 Zeichen speichern, also etwa 2,1 Milliarden (2 Gigabyte).
IntegerGrenze = 2^31 - 1 = 2147483647

Da ein String einen Integer (4 Byte) für die Längenangabe verwendet, sind das 2^31 - 1 - 4 = 2^31 - 5 = 2147483643 Bytes = 2 GB - 5 Byte.
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
Seite 1 von 2  1 2      


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 03:20 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