鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

嵌套循环展开次数过多导致栈溢出

嵌套循环如下例:

1
2
3
4
5
for (c = 0; c <= 36; c++) {
    a = 5;
    for (; a <= 42; a++)
        i = (h *= b *= 3) ? b |= 4 : (i %= 5) & 0;
}

在主机系统默认栈大小有限的情况下,可能会出现segmentation fault错误。

原因是由于循环展开会将内外层循环都全展开,导致形式过于复杂,在分析阶段会导致栈溢出。

规避方案

通过ulimit -s将栈空间设大,如ulimit -s 20000(栈大小上限设为20000K),或ulimit -s unlimited(栈大小不受限),可规避该问题。

ulimit -a命令可以查看系统默认栈大小限制。