0

我知道如何在命令行中将堆栈大小设置为无限制:

ulimit -s unlimited

而且,在 bash 中,当我将堆栈大小设置为无限制时,我的代码会成功运行并终止。

我可以在makefile(使用g++作为编译器)中将堆栈大小设置为无限制(或某个指定大小)吗?如果是这样,怎么做?

注意:我只能提交我的源文件(*.cpp、*.h)和我的项目的 makefile。也就是说,(1)运行makefile,(2)运行代码。因此,事先没有执行任何脚本或其他特殊指令,这就是为什么必须在 makefile 中进行更改......除非有人有其他/更好/聪明的想法?

提前致谢!

4

2 回答 2

3

好吧,另一个避免使用 ulimit 的绝妙主意(如在您的 makefile 中将其作为单独的应用程序调用(或通过使用脚本等)。这是通过在您自己的程序中复制 ulimit 命令的功能(例如在你的主要)。

为了做到这一点,看看 man 2 setrlimit ( manpage ),看看 RLIMIT_STACK 你可能想把它设置为 RLIM_INFINITY

于 2010-02-16T08:55:53.993 回答
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
于 2010-02-16T08:29:22.830 回答