Linux是否在较低的堆栈端提供了有保证的无法访问的内存区域?
作者:互联网
Linux是否在低堆栈端提供了一个具有保证最小大小的无法访问的内存区域?如果存在这样一个保证的最小尺寸,它是什么?
或者换句话说,什么时候我应该开始担心alloca()或者让我指向有效的非堆栈内存?
解决方法:
正如alloca man page所说:
There is no error indication if the stack frame cannot be extended.
(However, after a failed allocation, the program is likely to receive
a SIGSEGV signal if it attempts to access the unallocated space.)
所以根本没有迹象,它也说:
If the allocation causes stack overflow, program behavior is undefined.
堆栈溢出问题是递归的一般问题,并不是特别适用于alloca或让我们说可变长度数组.通常,您需要找到一种方法来限制递归的深度,重构到迭代解决方案或使用您自己的动态堆栈(可能不适用于这种情况).
更新
由于OP通过生成SIGBUS信号发现了堆栈溢出Linux does provide an after the fact indication using a guard page after the stack,该信号解决了问题的第一部分.
标签:c-3,memory-layout,linux,memory-management 来源: https://codeday.me/bug/20190831/1771943.html