n
Linux では、C を使用して、配列に格納する必要がある要素の数を動的に決定したと仮定しint my_array[n]
ます ( 100 バイト)。
ほとんどn
は小さく、十分の一です。しかし、場合n
によっては 1000 または 1'000'000 という大きなものになることもあります。
n*o + p
スタックがオーバーフローせずにバイトを保持できるかどうかを計算するにはどうすればよいですか?
基本的に: スタックに残っているバイト数は?
n
Linux では、C を使用して、配列に格納する必要がある要素の数を動的に決定したと仮定しint my_array[n]
ます ( 100 バイト)。
ほとんどn
は小さく、十分の一です。しかし、場合n
によっては 1000 または 1'000'000 という大きなものになることもあります。
n*o + p
スタックがオーバーフローせずにバイトを保持できるかどうかを計算するにはどうすればよいですか?
基本的に: スタックに残っているバイト数は?
スレッドを使用していない場合、またはコードがメイン スタックで実行されることがわかっている場合は、
man getrlimit
)スレッドを使用していて、メイン以外のスレッドで実行している可能性がある場合は、を参照してください。man pthread_getattr_np
確かに、利用可能なスタックの確認の質問は良い答えを与えます。
しかし、より現実的な答えは、コール スタックに大きなデータを割り当てないことです。
あなたの場合、ケースn<100
(そして、おそらくallocaを介してスタックに割り当てるのが理にかなっている)とケース(その後、 (または)をn>=100
使用してヒープに割り当て、それを忘れないでください)のケースを異なる方法で処理できます。しきい値 a -d を定数にします。malloc
calloc
free
100
#define
コール スタックの典型的なコール フレームは、現在のラップトップまたはデスクトップでは、せいぜい数キロバイトです (再帰またはスレッドがある場合は、できればそれ以下です)。合計スタックスペースは、通常、せいぜい数メガバイトです (時にはそれより少ないこともあります: カーネル内では、スタックは通常、それぞれ 4K バイトです!)。