2015-01-23 3 views
5

Я пишу программу C и предел превышения рекурсии через ошибку сегментации. Есть ли способ увеличить предел рекурсии программы (возможно, увеличив размер стека), либо с помощью опции GCC, либо с помощью опции командной строки? Программа работает на Ubunutu.Есть ли способ увеличить размер стека/рекурсию?

+0

Вы имеете в виду, что вы переполняете стек и, следовательно, происходит ошибка сегментации? –

+0

@iharob: Да, я проверил это с помощью 'gdb'. – Claudiu

+0

Почему бы вам не написать его итеративно? – saadtaame

ответ

5

Вы можете изменить размер стека с ulimit на Linux, например:

ulimit -s unlimited 

В Windows с Visual Studio, используйте /Foption.

+1

@iharob: вопрос помечен gcc, если бы он был Windows, он, вероятно, был бы помечен mingw. –

+3

'ulimit -s unlimited' на самом деле не делает размер стека неограниченным. Он просто позволяет использовать максимальный системный лимит. – wallyk

+0

@PeterHorvath, так что объясните мне, что не так в моем ответе. – ouah

2

Размер стека - это функция операционной системы, хотя многие более ранние операционные системы (например, MSDOS) не выполняли управление сегментом программного стека: это была задача программы для резервирования сегмента с достаточным размером.

С виртуальной памятью и 32-битными API-интерфейсами размер стека обычно предоставляется механизмом управления ресурсами. Например, в Linux команда ulimit предоставляет один источник контроля размера стека. Другие уровни контроля обеспечиваются механизмами внутри ядра, обеспечивающими политику системы, ограничения памяти и другие ограничения.