在 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);
}