AGB  ·  Datenschutz  ·  Impressum  







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

String Gültigkeit + PChar Verwendung

Ein Thema von stoxx · begonnen am 24. Feb 2008 · letzter Beitrag vom 26. Feb 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#11

Re: String Gültigkeit + PChar Verwendung

  Alt 25. Feb 2008, 19:43
ok, vielen Dank
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: String Gültigkeit + PChar Verwendung

  Alt 26. Feb 2008, 08:58
Ein String muss auch die ganze Prozedur über auf dem Stack liegen, damit diese dynamische Variable (die ja vom Compiler verwaltet wird) auch immer zuverlässig freigegeben wird.
Dazu legt Delphi um die gesamte Prozedur automatisch ein try..finally, damit asuch im Fehlerfall der String freigegeben werden kann. dazu muss er allerdings immer auf dem Stack liegen (jeder Thread hat übrigens seinen eigenen Stack). Ich wüsste nicht, dass die Code-Optimierung einen String in die Register schiebt.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#13

Re: String Gültigkeit + PChar Verwendung

  Alt 26. Feb 2008, 16:53
Zitat von sirius:
Ein String muss auch die ganze Prozedur über auf dem Stack liegen, damit diese dynamische Variable (die ja vom Compiler verwaltet wird) auch immer zuverlässig freigegeben wird.
Dazu legt Delphi um die gesamte Prozedur automatisch ein try..finally, damit asuch im Fehlerfall der String freigegeben werden kann. dazu muss er allerdings immer auf dem Stack liegen (jeder Thread hat übrigens seinen eigenen Stack). Ich wüsste nicht, dass die Code-Optimierung einen String in die Register schiebt.
ok .... wenn ich mir den RefCount vom String selber um eins erhöhen würde, damit Delphi am Ende der Procedure den String nicht freigibt.
(dann entsteht auch ein Speicherleck, wenn man es mal in einer Schleife testet)
Wie müsste ich den String dann sauber selber freigeben?
Und Manchmal steht der RefCount vom String in normalen Proceduren manchmal auf -1?
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: String Gültigkeit + PChar Verwendung

  Alt 26. Feb 2008, 17:04
auf -1 steht der, wenn er nicht im Speicher liegt.
z.B. wenn er von einer Konstante "geladen" wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#15

Re: String Gültigkeit + PChar Verwendung

  Alt 26. Feb 2008, 17:09
Zitat von stoxx:
Und Manchmal steht der RefCount vom String in normalen Proceduren manchmal auf -1?
Das ist dann ein Stringliteral oder Resourcestring. Durch RefCount=-1 "weiss" Delphi, dass dieser String nicht freigegeben werden darf.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: String Gültigkeit + PChar Verwendung

  Alt 26. Feb 2008, 17:23
an RefCount direkt würde ich nicht rumspielen.

ich behandle zwar Stringvaiablen wie Pointer (was sie ja im Grunde auch sind) und so kann man nette Dinge mit machen, aber ein "schöner" Weg ist das nicht gerade (wenn er auch einfach ist), aber wie du schon bemerkt hast, kann man sich so (falls man nicht aufpasst) ein Speicherleck einfangen.


was hindert dich eigentlich daran selber Speicher zu resservieren und freizugeben?
Delphi-Quellcode:
Var P: PChar;

P := GetMemory(Length(S) + 1);
MoveMemory(P, PChar(S), Length(S) + 1);
jetzt kannst du mit P alles machen, was du willst

und wenn der String nicht mehr benötigt wird, dann den Speicher per FreeMemory(P) wieder freigen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#17

Re: String Gültigkeit + PChar Verwendung

  Alt 26. Feb 2008, 17:58
Zitat:
was hindert dich eigentlich daran selber Speicher zu resservieren und freizugeben?
Die Geschwindigkeit


http://www.delphipraxis.net/internal...278&highlight=



ich will PChars auf den String halten, aber sicher sein, dass ich nicht ungültige PChars halte.
Falls doch mal jemand bei meinem StringExploder auf die Idee kommt, ihn länger zu haben, als die Procedure dauert
Und ich jedes Kopieren oder Anlegen von Speicher vermeiden will
In dieser Lösung ...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: String Gültigkeit + PChar Verwendung

  Alt 26. Feb 2008, 22:21
dann hat sich derjenige selbst drum zu kümmern, daß sein String lang genug am Leben bleibt.

schließlich hättest du dann noch das Problem mit dem Speicherleck.
oder wie meinst du soll dann bestimmt werden, wann der String freigegeben werden darf,
bzw. wo willst du dann das Freigeben des String veranlassen (wenn deine Prozedure schon lange beendet ist)?
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 2 von 2     12   


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 15:36 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