![]() |
Wie organisiert Delphi den Speicher
Hi zusammen !
Ich hab als Hausaufgabe in Prog auf Montag auf, herauszufinden, wie Delphi den Speicher organisiert: - Stack - High - Leed Diese Schlüsselwörter hat er mir an den Kopf geworfen, aber ich hab bisher nur herausgefunden, dass Delphi den Stack standardmäßig auf 16 KB hat. |
Re: Wie organisiert Delphi den Speicher
[quote="MrKnogge"]Hi zusammen !
Ich hab als Hausaufgabe in Prog auf Montag auf, herauszufinden, wie Delphi den Speicher organisiert: - Stack - High - Leed Zitat:
Denn wenn das für Delphi 32Bit (Version 2 bis 7) gilt, dann düften einige meiner Programm laufend einen Stack-Überlauf bringen. Windows gibt einen Stack von 1 MB vor und Delphi nutzt diesen auch so wie er ist. Zudem besitzt jeder Prozess einen Adressraum von 4 GB. Davon sind 2 GB für das System reserviert. Dein Hauptprogramm beginnt meist an der 4 MB Grenze des Adressraums. Adressraum: Kein physikalischer Speicher. Der Adressraum gibt den Bereich der Zeigeradressen vor. Er wird auch als virueller Speicher bezeichnet, da die virtuelle Adresse XYZ auf eine reale Adresse ABC im RAM abgebildet wird. Delphi installiert einen eigene Speichermanger, der die Reservierung von kleinen Speichermengen beschleunigt, da er einen großen Block vom System anfordert und diesen dann aufteilt und die freien Blöcke verwaltet. Speichermanagement ist ein sehr vielseitiges Thema und braucht in guten Büchern ein großes, eigenes Kapitel. |
Danke erstmal, ich soll nur die größen und den Aufbau in Erfahrung bringen.
|
Re: Wie organisiert Delphi den Speicher
Zitat:
1 MB erscheint mir etwas gross, da der Stack ja nur für die lokalen variablen ist. Und in Delphi steht bei meinen Programmen unter: Programm->Info : Stack 16 KB Weis jemand noch etwas zu den anderen Stichwörtern "leed" etc. gruss |
hmm,
daskann man doch unter Projekt/Options einstellen, oder ?
|
Re: hmm,
Zitat:
|
Re: Wie organisiert Delphi den Speicher
Zitat:
Wie erklärst du dir sonst, dass folgender Code funktioniert?
Delphi-Quellcode:
Wenn der Stack auf 16 KB beschränkt wäre, würde es bei diesen 640KB wohl zu einem Stacküberlauf führen. Tut es aber irgendwie nicht. (Das Array wird auf dem Stack angelegt und nicht im Heap, da es ein statisches Array ist.)
procedure MyProc;
var a: array[0..640 * 1024 - 1] of Char; begin a[1024 * 17] := 'b'; end; Das Wort "Leed" habe ich noch nie im Zusammenhang mit Stack gehört. google.de findet dazu auch nichts. Erst wenn ich "Leed" aus meiner Suchanfrage herausnehme findet google.de was über den Stack. Kann es sein, dass dein Lehrer Heap [Hi:p] gemeint hat und du Leed [Li:d] verstanden hast? [edit=Luckie]Delphi-Tags korrigiert. Mfg, Luckie[/edit] |
Re: Wie organisiert Delphi den Speicher
Zitat:
Zitat:
Ich werd hn nochmal fragen. Tschö & thx ! [edit=Luckie]Delphi-tags korrogiert. Mfg, Luckie[/edit] |
Re: Wie organisiert Delphi den Speicher
Du hattest recht, er meinte heap *schäm*
Im heap werden doch zB die Dynamischen Arrays gespeichert oder ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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