Linux是否提供低于堆栈底端的保证无法访问的内存区域?

Linux是否提供低于低端堆栈端的无法访问的内存区域,并具有保证的最小大小? 如果这种保证的最小尺寸存在,那是什么?

或换句话说,我什么时候该开始担心alloca()或者让我指向有效的非堆栈内存?

Solutions Collecting From Web of "Linux是否提供低于堆栈底端的保证无法访问的内存区域?"

正如alloca手册页所述 :

如果堆栈帧不能被扩展,则没有错误指示。 (但是,分配失败之后,如果程序尝试访问未分配的空间,程序可能会收到一个SIGSEGV信号。)

所以没有任何迹象,它也说:

如果分配导致堆栈溢出,程序行为是不确定的。

堆栈溢出问题是递归的一个普遍问题,而不是特别的alloca或者让我们说变长数组。 通常,您需要找到一种方法来限制递归深度,重构迭代解决方案或使用您自己的动态堆栈( 可能不适用于这种情况 )。

更新

正如OP所发现的那样, Linux在产生一个SIGBUS信号之后,通过在堆栈溢出之后使用一个保护页来提供一个事实指示 ,该信号解决了问题的第一部分。

感谢@ElliottFrisch让我用正确的名字谷歌这个哎呀。

看起来答案是“在较新的内核中:一个页面,在较旧的内核中:没有这样的保护”。

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=320b2b8de12698082609ebbc1a17165727f4c893