Увеличить размер стека при компиляции с помощью mingw?


Я пишу рекурсивный алгоритм flood-fill для поиска связанных компонентов в образе, мой код компилируется и хорошо работает с компилятором MSVC 2008; но скомпилированный MinGW двоичный файл разбился во время выполнения.

После того, как я преобразовал алгоритм в нерекурсивный с помощью std::stack, все идет хорошо.

Но что, если я должен использовать рекурсивный алгоритм в некотором случае, и mingw не может справиться с ним?

Как я могу увеличить размер стека двоичного файла, есть ли компиляция варианты?

Спасибо

3 7

3 ответа:

Использовать

gcc -Wl,--stack,N

Где N-размер стека. Например, gcc -Wl,--stack,4194304

Вероятно, лучше всего использовать pthreads для запуска нового потока и запуска вашего алгоритма в новом потоке. Одним из параметров для pthread_create является pthread_attr_t. С помощью этого атрибута можно указать размер стека (вызывая pthread_attr_setstacksize).

Edit: будет ли это работать или нет, зависит от поддержки базового уровня совместимости

Возможно, увеличение размера стека-это не то решение, которое вы хотите. Эти ограничения существуют не просто так. Также может случиться так, что в ближайшем будущем ваш алгоритм будет использовать еще больше стекового пространства, и вам придется снова увеличить его.

Возможно, вам следует рассмотреть возможность преобразования вашего алгоритма в нерекурсивный. Это можно сделать для любого алгоритма. см. это обсуждение

И вы, вероятно, получите улучшение производительности также