Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi size of string? (https://www.delphipraxis.net/11960-size-string.html)

SirThornberry 17. Nov 2003 20:45


size of string?
 
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?

CalganX 17. Nov 2003 20:55

Re: size of string?
 
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

Chewie 17. Nov 2003 20:58

Re: size of string?
 
Eine Variable vom Typ "String" ist nur ein Zeiger und dementsprechend 4 Byte groß.

SirThornberry 17. Nov 2003 21:02

Re: size of string?
 
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?

Chewie 17. Nov 2003 21:06

Re: size of string?
 
Hmm, weiß nicht genau, ob er dann freigegeben wird. Um sicher zu gehen, benutz zum Freigeben Finalize.

HAF4ever 17. Nov 2003 22:19

Re: size of string?
 
beim String kann man doch die Länge angeben.
Delphi-Quellcode:
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 :gruebel: (glaube ich)

Chewie 17. Nov 2003 22:26

Re: size of string?
 
@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.

SirThornberry 17. Nov 2003 22:27

Re: size of string?
 
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

Chewie 17. Nov 2003 22:31

Re: size of string?
 
Ein String kann bis zu 2^31 - 1 Zeichen speichern, also etwa 2,1 Milliarden (2 Gigabyte). Vorausgesetzt, du hast dazu genug virtuellen Speicher :wink:

himitsu 17. Nov 2003 22:31

Re: size of string?
 
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:

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.
Seite 1 von 2  1 2   

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