По умолчанию максимальный размер стека потока, который создается в собственном процессе IIS — 256 КБ

Применимо к: Internet Information Services 8.0

Обзор


По умолчанию максимальный размер стека потока, созданный машинный процесс Microsoft IIS (IIS) — 256 КБ до появления Windows Server 2008. Например когда W3wp.exe, DLLHost.exe и Inetinfo.exe создает поток в IIS 5.0 и IIS 6.0, по умолчанию максимальный размер стека потока является 256 КБ. Можно также явно вызывать функции CreateThread , чтобы указать размер стека потока. В Microsoft Windows 2000 Если Microsoft рабочий процесс ASP.NET (ASPNet_wp.exe) создает поток, максимальный размер стека потока равен 1 МБ. В Windows Server 2008 и более поздних версиях максимальный размер стека потока, выполняющихся на 32-разрядной версии IIS — 256 КБ и на x64 сервере — 512 КБ.

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

Дополнительные сведения


Максимальный размер стека потока не определяется отдельного компонента DLL или ASP ISAPI, выполняющиеся внутри процесса. Максимальный размер стека потока настраивается с помощью исполняемого файла процесса. Если нужен стек большего размера, можно программно создать поток, а затем установить подходящий размер стека. Кроме того Если поток закончится максимальный размер стека, необходимо изменить код в приложение для корректного использования стека.

Аргументы и локальные переменные, функции, хранятся в стеке потока. Если объявить локальную переменную, которая имеет большое значение, стек быстро исчерпан. Например в следующем примере кода функция требует 400 000 байт стека для хранения массива.
void func(void)   {
int i[100000];
// Use 100,000 integers multiplied by 4 bytes per integer to store the array.
return;
}

Примечание. Невозможен вызов этой функции IIS 4.0, IIS 5.0, IIS 5.1 и IIS 6.0.

Чтобы избежать использования стека, динамического выделения памяти. Например в следующем примере кода функция динамически выделяет память.
void func(void)   {
int *i

i = new int[100000];
// More code goes here.
return;
}

Примечание. В этом примере кода памяти хранится в куче, а не в стеке. Таким образом функция не требует 400 000 байт стека для хранения массива.

Если функция вызывается рекурсивно, стек может быстро исчерпан. Например для функции требуется 400 000 байт в стеке, если выполняются следующие условия:
  • Функции требуется 40 байт для локальной переменной.
  • Функция является рекурсивно вызывать 10 000 раз.
В приложении общий интерфейс шлюза (CGI) поток не имеет максимальный размер стека 256 КБ. При запуске приложения CGI, создается новый процесс, а исполняемые файлы CGI настройте размер стека. Можно также явно вызывать функции CreateThread , чтобы указать размер стека потока.

Для получения дополнительных сведений посетите веб-узле MSDN: