После прочтения this и this поста я провел очень простую программу на C# показано ниже:1 МБ ограничения размера стека, установленного CLR, для потока или всего приложения/процесса?
static void Main(string[] args)
{
Thread t = new Thread(new ThreadStart(myFunc), 2097152);
t.start();
}
Второй параметр конструктора Thread
класса является размер (в байтах) стека, которые будут выделены для потока. Номер 2097152 эквивалентен 2 мегабайтам. Но моя программа по-прежнему работает без ошибок? Если моя программа не выдает ошибку при распределении пространства стека (ограничение составляет 1 МБ для самого полного приложения) для этого потока или я пропускаю что-то очень очевидное. Первоначально я думал, что это может быть проверка компилятора.
Как CLR обеспечивает размер распределения стека для потока, чтобы он не нарушал границы?
P.S. : Мое приложение - 32-битное консольное приложение.
Что такое «ограничение размера стека на 1 МБ»? Размер стека по умолчанию для потока равен 1 МБ, но это не является жестким пределом. И параметр, который вы передаете, на самом деле является способом изменения этого значения по умолчанию. Пожалуйста, уточните, что вы просите. –
Откуда у вас возникла идея, что стек может быть только 1 МБ? Поскольку вы создаете стек размером 2 МБ, очевидно, что ваше убеждение в том, что стек может быть только 1 МБ, является ложным, так почему вы в это верите? –
Это было мое первое знакомство с этим ограничением в Windows сегодня. Фактически, теперь я понял, что это не предел, а конфигурация, которая может быть изменена для каждой нити. Первая строка на [this] (http://stackoverflow.com/questions/823724/stack-capacity-in -c-sharp) помог мне в другом направлении - «Размер стека по умолчанию для приложения .NET составляет 1 МБ (по умолчанию 256 КБ для 32-разрядных приложений ASP.NET и 512 КБ для 64-разрядных приложений ASP.NET) '. Любые сообщения, которые я упоминал, не использовали термин 'per-thread' даже один раз во всей полноте. Для первого таймера это может быть не так просто понять. – RBT