У меня есть мультиплатформенный код, который имеет несколько рекурсивных вызовов (выполняющихся в потоке, а не в главном), и в некоторых случаях размер стека по умолчанию недостаточен для глубины рекурсивности. Я решаю это в Windows, используя флаг компилятора / STACK:
/ STACK: 2097152 (2 МБ, по умолчанию: 1 МБ)
Но в OSX я использую GCD. Я читал, что это реализовано поверх pthreads, но я не могу найти способ установить размер стека потоков, как это делает pthreads (используя что-то вроде pthread_attr_setstacksize).
Я пытался использовать флаг компоновщика -Wl, -stack_size -Wl, 1000000, но не имеет значения, какую сумму я здесь установил, мое приложение всегда падает на одном и том же уровне глубины рекурсивности. Похоже, что это влияет только на основной поток, а не на те, что были созданы GCD.
Я попытался установить размер системного стека с помощью ulimit -s 32768 (по умолчанию: 8192), это не влияет на уровень глубины рекурсивности, которого я могу достичь.
Задача ещё не решена.
Других решений пока нет …