Delphi-PRAXiS
Seite 2 von 2     12   

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)

Christian Seehase 17. Nov 2003 22:16

Re: size of string?
 
Moin Chewie,

Zitat:

Zitat von Chewie
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.

Fast ;-)

Der Zeiger zeigt auf das erste Datenbyte, wenn die Länge > 0 ist. Davor, also auf Zeiger-4 beginnt der Längenzähler, auf Zeiger-8 der Referenzzähler.

Delphi-Quellcode:
var
  s : string;

begin
  s := StringOfChar(#32,800);
  ShowMessage(IntToStr(PDWORD(PChar(s)-4)^)+#13#10+IntToStr(PDWORD(PChar(s)-8)^));
end;

himitsu 17. Nov 2003 22:27

Re: size of string?
 
:oops: stimmt den Referenzzähler hab ich ganz vergessen. :duck:

scp 18. Nov 2003 00:58

Re: size of string?
 
Zitat:

Zitat von Christian Seehase
Der Zeiger zeigt auf das erste Datenbyte, wenn die Länge > 0 ist. Davor, also auf Zeiger-4 beginnt der Längenzähler, auf Zeiger-8 der Referenzzähler.

Mit PChar() mag das stimmen, aber versuchst du das selbe mal mit @AStr wirst du feststellen, das das nicht zum selben ergebnis führt wie @AStr[1]

choose 18. Nov 2003 08:03

Re: size of string?
 
Zitat:

Zitat von SirThornberry
Was passiert dann aber wenn ich dispose(Zeigervariable) mache, wird dann der speicher wo der String hinzeigt mit freigegeben?

Diese Aufgabe wird von Dispose übernommen.
Die Prozeduren Initialize und Finalize brauchen nur in den seltenste Fällen verwendet werden. Der Gebrauch von New und Dispose zählt nicht hierzu (wie ein Blick in dessen Implementierung oder die OH verrät ;))

Chewie 18. Nov 2003 13:50

Re: size of string?
 
Finalize wird aber laut OH bei dyn. Arrays benötigt (sofern keine Zuweisung an nil stattfindet). Also wenn das dyn. Array sich in einem dynamisch erzeugten Record befindet.

Christian Seehase 18. Nov 2003 19:11

Re: size of string?
 
Moin scp,

Zitat:

Zitat von scp
Mit PChar() mag das stimmen, aber versuchst du das selbe mal mit @AStr wirst du feststellen, das das nicht zum selben ergebnis führt wie @AStr[1]

Logisch, weil @AStr die Adresse der Variablen angibt, die die Adresses des Strings enthält, wohingegen @AStr[1] das gleiche ergibt wie @AStr^[0] (wenn man es so schreiben könnte), also die Dereferenzierung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
Seite 2 von 2     12   

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