Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Reservierten Speicher dynamisch vergrößern? (https://www.delphipraxis.net/114399-reservierten-speicher-dynamisch-vergroessern.html)

Neutral General 24. Mai 2008 16:42


Reservierten Speicher dynamisch vergrößern?
 
Hi,

Beispiel:

Delphi-Quellcode:
var p: Pointer;
begin
  GetMem(P,20);
kann man diesen reservierten Speicher nachträglich vergrößern? Also wenn nach diesem aufruf P = $AAAAAAAA dann soll nach der Speichervergrößerung P immernoch = $AAAAAAAA sein, es soll hintendran eben nur mehr Platz sein :mrgreen:

Gruß
Neutral General

Apollonius 24. Mai 2008 16:42

Re: Reservierten Speicher dynamisch vergrößern?
 
Verwende ReallocMem.

Neutral General 24. Mai 2008 16:48

Re: Reservierten Speicher dynamisch vergrößern?
 
Hi,

Habe gerade das hier ausprobiert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var p: Pointer;
begin
   GetMem(P,20);
   Caption := IntToHex(Integer(p),8);
   ReallocMem(p,24);
   Caption := Caption + '  ' + IntToHex(Integer(p),8);
   FreeMem(p);
end;
Aber $0105E1B8 <> $010734E0 :?

Oder sieht es nur so aus als wärs was anderes?^^ Bzw richtiger: Werden die alten Daten mitkopiert? Wahrscheinlich oder?

EDIT: Ja genau wie ich vermutet hatte. Danke :)

grenzgaenger 24. Mai 2008 16:51

Re: Reservierten Speicher dynamisch vergrößern?
 
Nö, gibts nicht. wie denn auch, wenn kein speicher hinten dran frei ist, kann er doch nicht alle anderen speicherblöcke verschieben... also, muss er sich selbst verschieben, und so, ist deine adresse im anschluss eine andere.

Neutral General 24. Mai 2008 16:58

Re: Reservierten Speicher dynamisch vergrößern?
 
Zitat:

Zitat von grenzgaenger
Nö, gibts nicht. wie denn auch, wenn kein speicher hinten dran frei ist, kann er doch nicht alle anderen speicherblöcke verschieben... also, muss er sich selbst verschieben, und so, ist deine adresse im anschluss eine andere.

Ist auch nicht so schlimm, solange die alten Daten mitverschoben werden :)

Apollonius 24. Mai 2008 19:57

Re: Reservierten Speicher dynamisch vergrößern?
 
ReallocMem prüft eben, ob hintendran frei ist, und vergrößert entweder den Block oder verschiebt an eine andere Stelle. Wie man sich denken kann, wird ReallocMem auch bei SetLength und TList verwendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz