我知道如何在命令行中将堆栈大小设置为无限制:
ulimit -s unlimited
而且,在bash中,当我将堆栈大小设置为无限制时,我的代码会成功运行并终止。
我可以在makefile中将堆栈大小设置为无限(或某些指定大小)(使用g ++作为编译器)吗?如果是这样,怎么样?
注意:我只能为我的项目提交源文件(* .cpp,* .h)和makefile。也就是说,(1)运行makefile,(2)运行代码。因此,事先没有执行脚本或其他特殊指令,这就是为什么必须在makefile中进行更改...除非有人有其他/更好/更好的想法?
提前致谢!
答案 0 :(得分:3)
嗯,另一个很好的想法是避免使用ulimit(在makefile中调用它作为一个单独的应用程序(或者使用脚本等)。这是通过在你自己的程序中复制ulimit命令的功能来复制它(例如,在你的主要)。
为了实现这一目标,请查看man 2 setrlimit(manpage),并查看RLIMIT_STACK 你可能想把它设置为RLIM_INFINITY
答案 1 :(得分:2)
您可以按命令执行此操作:
target:
ulimit -s unlimited && foo
这将允许foo以无限堆栈运行。不幸的是,您需要在每个需要更大堆栈的命令之前添加它。
你可以做一些更通用的事情:
run_%: %
ulimit -s unlimited && ./$^
# This will try to run a program called "progname" in the current
# directory with an unlimited stack
all: run_progname