如何增加gcc可执行文件的堆栈大小?

14

我有一个很大的Boost/Spirit元编程,当我尝试编译它时,会导致gcc的栈溢出。

我该如何增加gcc的栈大小,以便编译这个程序?

注意:没有无限递归,但是有足够多的偶发递归,以耗尽gcc的栈。


我很好奇 - 你在做什么?让你的元程序在编译器上崩溃是一项相当了不起的技能。 - Michael Kohne
我正在开发一个针对分布式规则引擎的实时事件分析领域特定语言。 - Jeff Leonard
3个回答

14

在Linux上,您可以在/etc/security/limits.conf中扩展堆栈大小。

您可以使用以下命令检查当前的堆栈大小

$ ulimit -s
8192

然后将堆栈扩展为原来的两倍:

youruser    soft    stack    16384

然后重新登录。

这将增加所有可执行文件的堆栈大小,而不仅仅是GCC的。


5
如果这是软限制,您可以通过输入 "ulimit -s <limit>" 来增加它,而无需重新登录。当然,这仅适用于当前的 shell。 - bdonlan
我刚刚使用了一个非常大的值:sourav soft stack 2000000。然后我无法在Linux上启动像Chromium、Falkon和Edge浏览器这样的应用程序!当我启动它们时,它们都会向我的SSD写入10 GB的数据... - 15 Volts

1
我在编译脚本中使用了这个:

CFLAGS += -Wl,--stack,10485760

它的作用是增加堆栈大小。

0
堆栈大小可以在链接期间进行配置。您应该查看有关链接器脚本的详细信息。这仅会改变您单个程序的堆栈大小。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接