Как изменить размер стека для программы.NET?

У меня есть программа, которая делает рекурсивные вызовы в течение 2 миллиардов раз и переполнения стека. Я вношу изменения, и затем этому все еще нужны 40K рекурсивные вызовы. Таким образом, мне нужны, вероятно, несколько МБ стековой памяти. Я слышал, что размер стека является значением по умолчанию к 1 МБ. Я попробовал поиск онлайн. Кто-то сказал для движения свойств-> компоновщик......... в Visual Studio, но я не могу найти его.

Кто-либо знает, как увеличить его? Также я задаюсь вопросом, могу ли я установить его где-нибудь в моей программе C#?

P.S. Я использую 32-разрядный winXP и 64 бита win7.

30
задан Benjamin 2 February 2014 в 00:20
поделиться

4 ответа

Самый простой способ установить размер стека начиная с .NET 2.0 и Win XP - это создать новый поток с желаемым размером стека: -

using System.Threading;

Thread T = new Thread(threadDelegate, stackSizeInBytes);
T.Start();

Чтобы изменить размер стека всей программы, вы должны использовать editbin: -

EDITBIN.EXE /STACK:<stacksize> file.exe
41
ответ дан 27 November 2019 в 23:33
поделиться

Компилятор не может это сделать. Вы можете отредактировать его постфактум, используя editbin / stack , или создать отдельный поток для вашего алгоритма и указать больший размер стека в конструкторе Thread .

При этом вы можете захотеть сгладить свою рекурсивную функцию ... Если у вас сейчас переполнение стека, трудно знать, что любой размер стека будет подходящим в долгосрочной перспективе. Это просто пластырь.

18
ответ дан 27 November 2019 в 23:33
поделиться

Скорее всего, вам следует попробовать использовать циклы вместо рекурсии.

9
ответ дан 27 November 2019 в 23:33
поделиться

Я знаю, что в VS вы можете установить произвольный размер стека (EDIT: для программ на C ++). Однако я бы посоветовал вам использовать хвостовой вызов (т.е. return MyFunc (args);), который автоматически перерабатывает пространство стека. Затем вы должны использовать какой-нибудь объект, выделенный кучей, для хранения состояния.

-1
ответ дан 27 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: