Процесс с определенным размером стека? - PullRequest
2 голосов
/ 25 мая 2010

Есть ли в C # способ запустить процесс с определенным размером стека?

Ответы [ 2 ]

4 голосов
/ 30 мая 2010

Фестиваль с понижением голосов, я не решаюсь опубликовать. Но Хенрик прав, самый первый поток запускается Windows, когда он запускает EXE. Он выполняет всю работу, загрузка CLR является одной из его обязанностей. И он запускает метод Main () в вашей программе.

.NET Framework предоставляет очень мало возможностей для настройки этого потока. Только атрибуты [MTAThread] и [STAThread] в методе Main () имеют значение, они влияют на то, как CLR вызывает API-функцию CoInitializeEx ().

Размер стека потока фактически настраивается. Это одно из полей в формате файла PE32, формата, используемого в Windows для исполняемых образов. Обычно за создание этого файла отвечает компилятор C # или VB.NET, и у них нет возможности установить начальный размер стека потока. Немного недосмотра. Они используют значения по умолчанию, один мегабайт для 32-разрядного EXE, четыре мегабайта для 64-разрядного EXE (Platform Target = x64).

Изменение этого значения возможно, вы можете запустить утилиту Editbin.exe для изменения EXE-файла, используя параметр командной строки / STACK. Вы захотите сделать это на этапе после сборки. Помните, что это несовместимо со строгими именами или подписью с сертификатом, поскольку оно изменяет файл EXE.

Между прочим, это не проблема, если вам нужен поток с большим количеством стекового пространства, вы создаете его самостоятельно в методе Main ().

0 голосов
/ 25 мая 2010

В этой теме они показывают PoC, который вы можете использовать Editbin.exe для изменения размера стека по умолчанию для потока, который входит в main: http://bytes.com/topic/c-sharp/answers/229335-stack-size

и если вы создаете новые темы, есть API для этого: http://msdn.microsoft.com/en-us/library/ms149581.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...