作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试进行一些高度递归的模拟和数学运算,在某些边缘情况下,我会溢出调用堆栈并获得 EXC_BAD_ACCESS 信号。将算法更改为迭代形式是不可行的,因为它是很多遗留代码。并且递归深度限制没有用,因为内存的使用是不确定的。
有没有办法检测可用堆栈的数量,以便我可以优雅地取消操作?
是否可以实现一种我可以持续检查未被覆盖的 Stack Canary 类型?
最佳答案
如果线程安全不是问题,请使用静态变量。像这样:
int recurse(int something) {
static int depth = 0;
++depth;
if (depth > MAX_DEPTH) { // bail }
...
int result = recurse(...);
--depth;
return result;
}
如果线程安全是一个问题,您可以将 depth
作为参数传递。
关于ios - 如何在递归算法中保护 IOS 免受 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362655/
我是一名优秀的程序员,十分优秀!