네이티브 IIS 프로세스에서 만든 스레드의 기본 최대 스택 크기는 256KB입니다.

이 문서에서는 네이티브 MICROSOFT 인터넷 정보 서비스(IIS) 프로세스에서 만든 스레드의 기본 최대 스택 크기를 소개합니다.

원본 제품 버전: 인터넷 정보 서비스 8.0
원래 KB 번호: 932909

요약

기본적으로 네이티브 IIS 프로세스에서 만든 스레드의 최대 스택 크기는 Windows Server 2008 이전의 256KB입니다. 예를 들어 Inetinfo.exe, DLLHost.exe 또는 W3wp.exe IIS 5.0 또는 IIS 6.0에서 스레드를 만드는 경우 스레드의 최대 스택 크기는 기본적으로 256KB입니다. CreateThread 함수를 명시적으로 호출하여 스레드의 스택 크기를 지정할 수도 있습니다. Microsoft Windows 2000에서 Microsoft ASP.NET 작업자 프로세스(ASPNet_wp.exe)가 스레드를 만드는 경우 스레드의 최대 스택 크기는 1MB입니다. Windows Server 2008 이상에서는 32비트 버전의 IIS에서 실행되는 스레드의 최대 스택 크기는 256KB이고 x64 서버의 최대 스택 크기는 512KB입니다.

참고

인터넷 정보 서비스는 각 작업자 프로세스 내에서 실행되는 애플리케이션 코드가 필요에 따라 한 번에 수백 개 이상의 스레드를 활용할 수 있도록 하는 다중 스레드 웹 애플리케이션 플랫폼입니다. 각 스레드는 프로세스의 가상 메모리 사용량을 관리 가능한 한도 내에서 유지하기 위해 동일한 스택 크기 제한에 바인딩됩니다.

추가 정보

스레드의 최대 스택 크기는 프로세스 내에서 실행되는 개별 ISAPI, DLL 또는 ASP 구성 요소에 의해 결정되지 않습니다. 스레드의 최대 스택 크기는 프로세스의 실행 파일에 의해 구성됩니다. 스택 크기가 커야 하는 경우 프로그래밍 방식으로 스레드를 만든 다음 적절한 스택 크기를 설정할 수 있습니다. 또는 스레드가 최대 스택 크기가 부족할 경우 스택을 올바르게 사용하려면 애플리케이션의 코드를 변경해야 합니다.

함수의 인수 및 지역 변수는 스레드 스택에 저장됩니다. 값이 큰 지역 변수를 선언하면 스택이 빠르게 소진됩니다. 예를 들어 다음 코드 예제의 함수는 배열을 저장하려면 스택에 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(Common Gateway Interface) 애플리케이션에서 스레드의 최대 스택 크기는 256KB가 아닙니다. CGI 애플리케이션을 시작하면 새 프로세스가 만들어지고 CGI 실행 파일은 스택 크기를 구성합니다. CreateThread 함수를 명시적으로 호출하여 스레드의 스택 크기를 지정할 수도 있습니다.

자세한 내용은 스레드 스택 크기를 참조하세요.