- Was sind der Stack und der Heap?
- Wo befinden sie sich physisch im Speicher eines Computers?
- In welchem Maße werden sie vom Betriebssystem oder der Laufzeitumgebung der Sprache kontrolliert?
- Was ist ihr Geltungsbereich?
- Was bestimmt ihre Größen?
- Was macht einen schneller?
Eine weitere Kleinigkeit - die meisten Antworten suggerieren (leicht), dass die Verwendung eines "Stacks" von der C
-Sprache erforderlich ist. Dies ist ein häufiges Missverständnis, obwohl es das (bei weitem) dominante Paradigma für die Implementierung von C99 6.2.4 automatische Speicherbereichsobjekte
(Variablen) ist. Tatsächlich taucht das Wort "Stack" nicht einmal im C99
-Sprachstandard auf: open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
5 Stimmen
@mattshane Die Definitionen von Stack und Heap hängen überhaupt nicht von Wert- und Referenztypen ab. Mit anderen Worten, der Stack und Heap können vollständig definiert werden, auch wenn Wert- und Referenztypen niemals existiert hätten. Darüber hinaus ist der Stack nur ein Implementierungsdetail beim Verständnis von Wert- und Referenztypen. Laut Eric Lippert: Der Stack ist ein Implementierungsdetail, Teil Eins.
248 Stimmen
Eine wirklich gute Erklärung finden Sie hier Was ist der Unterschied zwischen einem Stapel und einem Heap?
19 Stimmen
Auch (wirklich) gut: codeproject.com/Articles/76153/… (der Stack-/Heap-Teil)
21 Stimmen
youtube.com/watch?v=clOUdVDDzIM&spfreload=5
5 Stimmen
Verwandte, siehe Stack Clash. Die Stack Clash-Beseitigungen betrafen einige Aspekte von Systemvariablen und Verhaltensweisen wie
rlimit_stack
. Siehe auch Red Hat Problem 14632411 Stimmen
Nicht klar in den Antworten: Für eine Laufzeitumgebung für eine Programmiersprache (z.B. .NET) gibt es pro Thread einen Stack, um Methodenaufrufe/lokale Variablen zu verwalten, und nur einen gemeinsamen Heap für alle Prozesse der Laufzeitumgebung. Der Heap wird vom Garbage Collector überwacht. Die Speicherbereiche der Laufzeitumgebung (Stacks/Heap) sind Teil des zusammenhängenden virtuellen Speichers, der vom Betriebssystem den Prozessen zugewiesen wird (der selbst von physischen RAM-Blöcken in keiner bestimmten Reihenfolge versorgt wird), auf Anforderung der Prozesse. Die Verwirrung um "Stacks" liegt an der Existenz vieler "Stack"-Arten in einem Computer, die nicht mit den Laufzeitumgebungs-Stacks zusammenhängen. Ein "Stack" ist einfach eine LIFO-Speicherstruktur.
0 Stimmen
Wenn Sie eine Simulation sehen möchten, wie der Stapel und der Heap während der Ausführung eines C-Programms aussehen, versuchen Sie C Tutor.
0 Stimmen
Du solltest definitiv dieses Video sehen, das alle oben genannten Antworten klärt youtube.com/watch?v=7O4JPdKjc30