Я пишу программу C и предел превышения рекурсии через ошибку сегментации. Есть ли способ увеличить предел рекурсии программы (возможно, увеличив размер стека), либо с помощью опции GCC, либо с помощью опции командной строки? Программа работает на Ubunutu.Есть ли способ увеличить размер стека/рекурсию?
ответ
Вы можете изменить размер стека с ulimit
на Linux, например:
ulimit -s unlimited
В Windows с Visual Studio, используйте /F
option.
@iharob: вопрос помечен gcc, если бы он был Windows, он, вероятно, был бы помечен mingw. –
'ulimit -s unlimited' на самом деле не делает размер стека неограниченным. Он просто позволяет использовать максимальный системный лимит. – wallyk
@PeterHorvath, так что объясните мне, что не так в моем ответе. – ouah
Размер стека - это функция операционной системы, хотя многие более ранние операционные системы (например, MSDOS) не выполняли управление сегментом программного стека: это была задача программы для резервирования сегмента с достаточным размером.
С виртуальной памятью и 32-битными API-интерфейсами размер стека обычно предоставляется механизмом управления ресурсами. Например, в Linux команда ulimit
предоставляет один источник контроля размера стека. Другие уровни контроля обеспечиваются механизмами внутри ядра, обеспечивающими политику системы, ограничения памяти и другие ограничения.
Вы имеете в виду, что вы переполняете стек и, следовательно, происходит ошибка сегментации? –
@iharob: Да, я проверил это с помощью 'gdb'. – Claudiu
Почему бы вам не написать его итеративно? – saadtaame