Установить размер стека в make-файле? - PullRequest
0 голосов
/ 16 февраля 2010

Я знаю, как установить неограниченный размер стека в командной строке:

ulimit -s unlimited

И в bash, когда я установил неограниченный размер стека, мой код запускается и успешно завершается.

Могу ли я установить неограниченный размер стека (или некоторый указанный размер) в make-файле (с компилятором g ++)? Если да, то как?

Примечание: я могу отправлять только мои исходные файлы (* .cpp, * .h) и make-файл для моего проекта. То есть (1) запускается make-файл, (2) выполняется код. Таким образом, никакие сценарии или другие специальные инструкции не выполняются заранее, поэтому изменения должны быть сделаны в make-файле ... если у кого-то нет других / лучших / блестящих идей?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 16 февраля 2010

Ну, еще одна блестящая идея - избегать использования ulimit (например, вызывая его как отдельное приложение в вашем make-файле (или используя скрипты и т. Д.). Это путем копирования функциональности команды ulimit путем дублирования ее в вашей собственной программе (например, в вашем основном).

Для этого взгляните на man 2 setrlimit ( manpage ) и посмотрите на RLIMIT_STACK и вы, вероятно, хотите установить его на RLIM_INFINITY

2 голосов
/ 16 февраля 2010

Вы можете сделать это для каждой команды:

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
...