Linux は、最小サイズが保証されている下位スタック エンドの下にアクセスできないメモリ領域を提供しますか? そして、そのような保証された最小サイズが存在する場合、それは何ですか?
alloca()
言い換えれば、有効な非スタック メモリへのポインターをいつ心配し始めるべきでしょうか。
Linux は、最小サイズが保証されている下位スタック エンドの下にアクセスできないメモリ領域を提供しますか? そして、そのような保証された最小サイズが存在する場合、それは何ですか?
alloca()
言い換えれば、有効な非スタック メモリへのポインターをいつ心配し始めるべきでしょうか。
alloca のマニュアルページには次のように書かれています。
スタック フレームを拡張できない場合、エラーは表示されません。(ただし、割り当てに失敗した後、プログラムが未割り当て領域にアクセスしようとすると、SIGSEGV シグナルを受信する可能性があります。)
したがって、兆候はまったくなく、次のようにも書かれています。
割り当てによってスタック オーバーフローが発生した場合、プログラムの動作は未定義です。
スタック オーバーフローの問題は、再帰に関する一般的な問題であり、alloca
可変長配列に固有のものではありません。通常、再帰の深さを制限する方法を見つけるか、反復ソリューションにリファクタリングするか、独自の動的スタックを使用する必要があります (おそらくこのケースには当てはまりません)。
アップデート
OPが発見したように、Linuxは、質問の最初の部分に対処する信号を生成することにより、スタックオーバーフローのスタックの後にガードページを使用して事後表示を提供します。SIGBUS