言語やプラットフォームのスタックサイズが固定されていないため、オーバーフローしにくい言語やプラットフォームがありますか?私はUNIXでCを使用することを覚えている、スタックはWindows 3.1の時代に戻ってオーバーフローするのは難しいでしたが、スタックは非常にオーバーフローするのは簡単でした。どの言語/プラットフォームに固定スタックサイズがないのですか?
答えて
を持つことになり、ほとんどの言語は - Javaはメモリによってのみ制限されるstackクラスを持っています。おそらくコールスタックを意味する可能性があります。この場合、私が考えることのできる最大の例はStackless Pythonです。私の理解では、Pythonコードの呼び出しスタックとしてpure-pythonメモリ制限スタック(Javaのようなもの)を使用しています。 Cのコールスタックを使用します。
これは実用的なものと理論的なものの問題です。 Lispインタープリタのスタックは、スキームのみと末尾再帰を実装して他の言語で利用可能なメモリ
によって制限されますが、古いスタックを意味する「スタック」による場合は、末尾再帰関数は無限スタック
関連する反復最適化を伴う末尾の再帰関数は、私が知る限りスタックにさえいきません。呼び出し関数に関連して "スタック"を抽象として定義すると、そのステートメントは真ですが、特にそれほど役に立ちませんので、その抽象を使用しません。私はその定義が正常であったという印象を得ていませんでした。 –
UNIX/SolarisのCでは、物理メモリだけでスタックサイズが制限されていますか? –
私はCがカーネルのパラメータであるスタックセグメントのサイズを持っていることを思い出してください。 – jottos
Macシステム6,7、および8には、人為的な制限なしに成長する可能性のある呼び出しスタックがありました。
また、スタックを検出するために何の確実な方法がありません - ヒープの衝突を、トラブルのすべての種類の中にそのようにあなたを得ることができる...
同様の質問:http://stackoverflow.com/questions/53827/checking-available-stack-size-in-c –