既定では、ネイティブ IIS プロセスで作成されるスレッドの最大スタック サイズは 256 KB です。

適用対象: Internet Information Services 8.0

概要


既定では、ネイティブの Microsoft インターネット インフォメーション サービス (IIS) プロセスによって作成されるスレッドの最大スタック サイズは、Windows Server 2008 より前に、256 KB は。Inetinfo.exe、DLLHost.exe、または W3wp.exe、IIS 5.0 または IIS 6.0 でスレッドを作成するときのスレッドの最大スタック サイズは 256 KB 既定します。スレッドのスタック サイズを指定する関数の関数を明示的に呼び出すことができます。Microsoft Windows 2000 で Microsoft ASP.NET ワーカー プロセス (ASPNet_wp.exe) が、スレッドを作成する場合、スレッドの最大スタック サイズは 1 MB です。Windows Server 2008 で以上の場合、32 ビット バージョンの IIS で実行されているスレッドの最大スタック サイズは、256 KB、および、x64 サーバーは 512 KB です。

注:インターネット インフォメーション サービスにより、数百台を利用するには、各ワーカー プロセス内で実行されているアプリケーションのコードをマルチ スレッド化された web アプリケーション プラットフォームでは必要に応じて、一度に複数のスレッドです。各スレッドは、同じスタック サイズの制限によって管理可能な範囲内でプロセスの仮想メモリの使用状況を維持するためにバインドされています。

詳細


スレッドの最大スタック サイズはプロセス内で実行されている個々 の 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 回呼び出す再帰的です。
Common Gateway Interface (CGI) アプリケーションでは、スレッドは最大スタック サイズは 256 KB をありません。CGI アプリケーションを起動するときに新しいプロセスが作成され、CGI 実行可能ファイルがスタックのサイズを構成します。スレッドのスタック サイズを指定する関数の関数を明示的に呼び出すことができます。

詳細については、次の MSDN Web サイトを参照してください。