Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Was ist HEAP ? (https://www.delphipraxis.net/54748-ist-heap.html)

sniper_w 11. Okt 2005 06:27


Was ist HEAP ?
 
Was soll man darunter verstehen ? Wie definiert man das ?

Daniel 11. Okt 2005 06:29

Re: Was ist HEAP ?
 
Recht gut erklärt bei Wikipedia:
http://de.wikipedia.org/wiki/Heap_%28Datenstruktur%29

Mal ehrlich: Selber gesucht hast Du nicht, oder? Oder hast Du eine spezielle Frage zu Heaps?

sniper_w 11. Okt 2005 06:49

Re: Was ist HEAP ?
 
Nach dem ich den Artickel gelesen habe, habe ich die Frage gestellt, wollte nur sehen ob das auch stimmt. Nur dass es in Wikipedia steht, heisst nicht automatisch, dass es stimmt.
Speziel:
Es kommt immer wieder vor, Variabeln sind auf dem Heap "gespeichert", oder es gibt sie da, und es gibt Variabeln auf den Stack ? Unterschied ?

ripper8472 11. Okt 2005 07:12

Re: Was ist HEAP ?
 
stackvariablen sind deine gewohnten variablen. sie werden auf dem stack angelegt. naeheres dazu unter [wikipedia]Stack (Datenstruktur)[/wikipedia]

heapvariablen werden durch dynamische speicheranforderung (malloc()/ new in c/c++) geschaffen und werden durch zeiger benutzt.
dank des heaps kann man megabytes an speicher benutzen, was auf dem stack nicht moeglich waere. der stack kann naemlich nur begrenzt gross sein (ok, stimmt nicht ganz, aber tun wir mal so).

Flocke 11. Okt 2005 07:18

Re: Was ist HEAP ?
 
Im Grunde gibt es da mehrere Bereiche, die man aber in drei "große" Sektionen trennen kann.

1. Statische Variablen, die du im Programm deklarierst (z.B. mit globalen var Statements), liegen im globalen Datenbereich.
2. Dynamische Variablen, die du während der Laufzeit alloziierst (wie z.B. TObject.Create) liegen auf dem Heap.
3. Lokale Variablen, die du innerhalb von Prozeduren verwendest, liegen auf dem Stack.

Gründe:
für 3 - die Variablen muss es mehrfach geben können wg. Rekursion.
für 2 - die Größe der Variablen steht zur Compilezeit noch nicht wirklich fest.

Dabei musst du allerdings unterscheiden, dass z.B. bei
Delphi-Quellcode:
var
  Form1: TForm1;
die Variable Form1 im statischen Datenbereich liegt, der Inhalt jedoch auf dem Heap (weil er dynamisch alloziiert wird).

// EDIT: Nix roter Kasten?!?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 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