2012-01-18 11 views
6

私は最近「linux stack」と「linux stack size」のバグに遭遇しました。私は私のボックスの制限は何であったか確認するためにLinuxスタックとは何ですか?

ulimit -a 

をしようとする私を指示するブログに出くわし、それがデフォルトのようです8192kbに設定しました。

"linux stack"とは何ですか?どのように動作しますか、何が格納されますか、それは何ですか?

+3

http://en.wikipedia.org/wiki/Call_stack –

+0

スタックオーバーフローが深すぎる(または無限)再帰で表示されることがあります。あるいは、おそらくCコード中の 'alloca'(またはそれと同等のもの、可変長配列のようなもの)の乱用によって。 –

+0

関連:http://stackoverflow.com/questions/17671423/stack-allocation-for-process | http://unix.stackexchange.com/questions/145557/how-does-stack-allocation-work-in-linux/239323#239323 –

答えて

7

短い答えは:

プログラムは、あなたのLinuxボックスの実行時に、彼らは追加して、プログラムの機能として、定期的にthe stackからデータを削除します。スタックサイズは、スタックのメモリにどれくらいの領域が割り当てられているかを反映します。スタックサイズを大きくすると、プログラムは呼び出すことができるルーチンの数を増やすことができます。関数が呼び出されるたびに、最後のルーチンデータの上にスタックされたデータがスタックに追加されます(最後のルーチンデータの上に積み重ねられます)。

プログラムが非常に複雑で、特別な目的に設計されていない限り、8192kbのスタックサイズは通常は問題ありません。グラフィックス処理プログラムのようないくつかのプログラムでは、機能するスタックのサイズを増やす必要があります。彼らはスタックに多くのデータを保存するかもしれないので。

これらのアプリケーションのスタックサイズを自由に増やしても問題ありません。そのためには、

ulimit -s bytes

を使用ところで、What is a StackOverflowError?

+0

お返事ありがとうございました。私はRubyアプリケーションで 'SystemStackError:stack level too stack'エラーが発生しており、調査を続ける前に基礎をより深く理解したかったのです。 – jaredonline

関連する問題