2009-05-29 5 views
1

hat einige Sprache oder Plattform nicht eine feste Größe des Stapels und daher nicht leicht zu überlaufen? Ich erinnere mich daran, C unter UNIX zu benutzen, der Stack war schwer zu überfließen, aber in den Tagen von Win 3.1 war der Stack sehr leicht zu überlaufen.Welche Sprache/Plattform hat keine feste Stapelgröße?

+0

ähnliche Frage erhalten: http://stackoverflow.com/questions/53827/checking-available-stack-size-in-c –

Antwort

2

Wenn von „stapeln“ Sie alle alten Stapel bedeuten, die meisten Sprachen tun-- Java hat eine stack Klasse, die nur durch Speicher begrenzt ist. Wahrscheinlicher meinst du den Aufruf-Stack, in diesem Fall ist das größte Beispiel, das ich mir vorstellen kann, Stackless Python, das nach meinem Verständnis einen pure-python-Speicher-begrenzten Stack (wie Java) als Call-Stack für Python-Code verwendet den Call-Stack von C verwenden.

1

Dies ist eine Frage der praktischen gegenüber der theoretischen. der Stapel eines Lisp-Interpreter ist nur durch die verfügbaren Speicher

in Schema und anderen Sprachen, die Endrekursion implementieren, würde ein Schwanz rekursive Funktion einen unendlichen Stapel

+0

Eine tail rekursive Funktion mit der zugehörigen iterativen Optimierung geht, soweit ich weiß, nicht auf den Stapel. Wenn Sie "stack" als auf aufrufende Funktionen bezogen definieren, ist diese Aussage als Abstraktion wahr, aber ich würde diese Abstraktion nicht verwenden, da sie nicht besonders hilfreich ist. Ich hatte nicht den Eindruck, dass diese Definition auch normal war. –

+0

kann C nicht auf UNIX/Solaris auch eine Stack-Größe haben, die nur durch den physischen Speicher begrenzt ist? –

+0

Ich erinnere C hatte/hatte eine Stack-Segment-Größe, die ein Kernel-Param ist – jottos

0

Die Mac-Systeme 6, 7 und 8 hatten Aufruf-Stacks, die ohne künstliche Begrenzung wachsen konnten.

Es hat auch keinen garantierten Weg, um einen Stapel zu erkennen - Heap-Kollision, und könnten Sie in alle Arten von Schwierigkeiten auf diese Weise ...