URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8248
[ Назад ]

Исходное сообщение
"Как увеличить размер стека C-программы?"

Отправлено Cont , 01-Май-09 22:43 
В опциях ld нашел

--stack reserve
--stack reserve,commit
Specify the number of bytes of memory to reserve (and optionally commit) to be used as stack for this program.  The default is 2Mb reserved, 4K committed.  [This option is specific to the i386 PE targeted port of the linker]

Компилирую
gcc -Wl,--stack=0x1000000 -o t.cgi t.c
/usr/bin/ld: unrecognized option '--stack=0x1000000'

Программа использует сложную и глубокую рекурсию, потому размер стека очень важен.
Как быть?


Содержание

Сообщения в этом обсуждении
"Как увеличить размер стека C-программы?"
Отправлено gaa , 01-Май-09 23:08 
>[This option is specific to
>the i386 PE targeted port of the linker]

Учимся читать. i386 PE --- это под виндовс.

>Программа использует сложную и глубокую рекурсию, потому размер стека очень важен.
>Как быть?

Не использовать системный стек. Завести структуру данных типа stack и работать с ней соответствующим образом.


"Как увеличить размер стека C-программы?"
Отправлено Cont , 02-Май-09 00:53 
>Учимся читать. i386 PE --- это под виндовс.

Не знал этого. Только второй день С под Unix изучаю.

>>Программа использует сложную и глубокую рекурсию, потому размер стека очень важен.
>>Как быть?
>
>Не использовать системный стек. Завести структуру данных типа stack и работать с
>ней соответствующим образом.

На форуме я нашел тему про память, в которой добрые люди советовали использовать функцию setrlimit(). Стек через RLIMIT_STACK увеличил до 120-130 Мб. Больше пока не получается.


"Как увеличить размер стека C-программы?"
Отправлено svn , 02-Май-09 02:22 
>Стек через RLIMIT_STACK увеличил до 120-130 Мб. Больше
>пока не получается.

Наверно потому, что нет больше виртуальной памяти (адресов свободных).

С другой стороны 120 мегабайт стека, это очень, очень много.


"Как увеличить размер стека C-программы?"
Отправлено Cont , 02-Май-09 10:00 
>Наверно потому, что нет больше виртуальной памяти (адресов свободных).

В куче я могу выделить в несколько раз больше.
И по 1Гб выделял. Здесь я честно ограничен только объемом виртуальной памяти.

>С другой стороны 120 мегабайт стека, это очень, очень много.

Хочется все. :) Экспериментировал с sigaltstack(), толку не было.
Видимо, там нужно использовать в связке sigaction(), а это мудрено.

Если хватать не будет, проще, по совету gaa, приспособить для стека кучу.
А если и этого не хватит, то придется решать мою NP-задачу простым перебором.
А это очень, очень долго. :)

Всем спасибо.


"Как увеличить размер стека C-программы?"
Отправлено const86 , 02-Май-09 20:14 
>Экспериментировал с sigaltstack(), толку не было.
>Видимо, там нужно использовать в связке sigaction(), а это мудрено.

Это же про обработчики сигналов.
Смотрите pthread_attr_setstack(), если уж очень хочется стек тянуть. Но лучше всё-таки этим не заниматься.