AGB  ·  Datenschutz  ·  Impressum  







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

Problem bei FreeMem

Ein Thema von 3_of_8 · begonnen am 15. Jul 2006 · letzter Beitrag vom 17. Jul 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

Re: Problem bei FreeMem

  Alt 15. Jul 2006, 20:52
Weil der String halt nicht so arbeitet

str ist ja "nur" ein pointer auf die Stringstruktur


Code:
RRRRCCCCDDDDDDDDDDDDDDDDDDDDDDD.....#0
^   ^   ^                            ^
^   ^   ab hier sind dann alle Elemente (Zeichen) aufgereit
^   Elemete im Array ... entspricht beim String der Zeichenanzahl
Refferenzzähler                     ^
^                                    ^
^____________________________________^
diese Daten liegen [b]einem[/b] Speicherblock
der Zeiger in str zeigt zwar nicht wie allgemein üblich auf den Anfang des resservierten Datenbereichs, sonden aud das erste Zeichen,
dies ist allerdings nur weil es halt so einfacher ist den string nach PChar zu casten.

zur Speicherverwaltung wird demnach immer PInteger(str)-2*SizeOf(Integer) an GetMem, ReallocMem und FreeMem geleitet.
Und da gibt es Probleme, sobald du den String mal verändernfreigeben willst

Length arbeitet ja auch nur mit PInteger(PInteger(str)-SizeOf(Integer))^, was auch falsche werte liefern würd, wenn dman daran rumfummelt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Problem bei FreeMem

  Alt 15. Jul 2006, 22:33
Und die Funktion Delete() im Gegensatz dazu? Wie schnell/langsam ist diese dazu?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem bei FreeMem

  Alt 17. Jul 2006, 12:38
Jenachdem wie der MemoryManager arbeitet und wie lang gerade der String ist, ist meine "schnelle" Version vielleicht 1/16 bis 1/4 aller Fälle schneller ... bei mir wird ja der Speicherblock nicht gekürtzt und demnach entfällt eine eventuelle Änderung, was bis hin zum Kopieren des gesamten Strings gehen könnte.

Aber Delete ist meistens schonmal schneller als Copy, da es den String direkt bearbeitet.
Copy legt ja immer erst 'ne Kopie an, welche per Result übergeben wird und erst dann wird das Original durch die Kopie ersetzt.
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 00:53 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