2016-11-16 6 views
-1

Auf jeder Plattform, mit der ich gearbeitet habe, war die Stackgröße immer begrenzt. Sie mussten an einem bestimmten Punkt (vor dem Start des Programms) die maximale Stapelgröße angeben, und sie wurde vorab zugewiesen. Warum kann der Stapel keine verknüpfte Liste im Heapspeicher sein? Dann wäre es praktisch unbegrenzt. Ist es eine inhärente Eigenschaft aller heutigen Computerarchitekturen?Warum ist Stack begrenzt?

Meine Frage bezieht sich nicht auf eine bestimmte Programmiersprache oder eine bestimmte Plattform. Es ist reine akademische Neugier.

(Mit ‚Stapel‘ meine ich den Speicher, wo Fäden Speicherausführungs-Spuren und Argumente, wenn es irgendeine Zweideutigkeit ist.)

Antwort

0

Ignorieren der Tatsache, dass die Stapelgröße letztlich durch die Hardware gebunden ist, auf dem es läuft, es gibt dynamische Stapel. Werfen Sie einen Blick auf die Go-Programmiersprache: https://golang.org es hat einen "unbegrenzten" Stapel.

Eines der wichtigsten Merkmale von Goroutines sind ihre Kosten; Sie sind kostengünstig in Bezug auf den anfänglichen Speicherbedarf (im Gegensatz zu den 1 bis 8 Megabyte mit einem herkömmlichen POSIX-Thread) und ihr Stack wächst und schrumpft je nach Bedarf. Dies ermöglicht einer Gorroutine, mit einem einzelnen 4096-Byte-Stapel zu beginnen, der bei Bedarf wächst und schrumpft, ohne dass das Risiko besteht, dass er jemals ausläuft. (Von https://dave.cheney.net/2013/06/02/why-is-a-goroutines-stack-infinite)

Verwandte Themen