Увеличить размер стека при компиляции с mingw? - PullRequest
7 голосов
/ 24 августа 2010

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

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

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

Спасибо

Ответы [ 3 ]

13 голосов
/ 25 августа 2010

Используйте

gcc -Wl,--stack,N

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

0 голосов
/ 28 июня 2017

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

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

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

0 голосов
/ 24 августа 2010

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

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

...