x86 Linux システムでスタック オーバーフローを引き起こす特定の条件があります。
struct my_big_object[HUGE_NUMBER]
スタック上。それを歩くと、最終的に が発生しSIGSEGV
ます。alloca()
ルーチン ( と同様ですが、malloc()
スタックを使用し、自動的にそれ自体を解放し、SIGSEGV
大きすぎる場合は爆発します)。更新: 最初に述べたように、 alloca() は正式に廃止されたわけではありません。それはただ落胆するだけです。
特定のオブジェクトに対してローカル スタックが十分に大きいかどうかをプログラムで検出する方法はありますか? を介してスタックサイズを調整できることを知っているulimit
ので、方法があることを願っています(ただし、移植性はありません)。理想的には、次のようなことができるようになりたいです。
int min_stack_space_available = /* ??? */;
if (object_size < min_stack_space_available)
{
char *foo = alloca(object_size);
do_stuff(foo);
}
else
{
char *foo = malloc(object_size);
do_stuff(foo);
free(foo);
}