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

编译极复杂表达式导致栈耗尽

如下例,表达式中有10000个变量连续相加:

Sum += g0 + g1 + g2 + … + g9998 + g9999   // 10000个变量连续相加

在主机系统默认栈大小有限的情况下,可能会出现segmentation fault错误,原因是该表达式极其复杂,编译时引起Clang进程使用的栈大小超过系统限制。

在较高的优化等级下,一部分循环会被展开,也会导致生成极复杂的表达式。

规避方案

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

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

图1 系统信息