プリントスタック TOKYO

データベースとセキュリティの世界から離れて早数年。過去の記憶を探しています。

Windows のデスクトップヒープ

Windows でアプリケーションを複数操作しているとメモリのエラーが出現したり、そのアプリケーションが起動できなくなるなどの現象が起きます。

たとえば、12,000 K のアプリケーションを 70 個ほど起動すると 71 個目は起動できなくなる。

Windows では、プロセスを起動する際に WIN 32 API の "CreateProcess" APIを利用します。(余談ですが、Unixシステムでは fork() にあたります。)このAPIには対話型と非対話型を選ぶことができます。このとき、非対話型だとデスクトップヒープに割り当てられるサイズは、概ね 512K と小さいためサーバー型のアプリケーションでは耐えうることができない可能性があります。(詳しくは調べていないが、サービスのログオンで対話型を指定することができるようです。)
ただし、スレッド型のアプリケーションの場合は、このヒープ領域に影響しないようである。

デスクトップヒープのサイズは 「Microsoft Support Professionals Toolkit for Windows」 の Desktop Heap Monitor を利用すれば調べることができます。

デスクトップヒープをレジストリで拡張(増やす)する場合はマイクロソフトのサポートページを参考に行うことでできます。

デスクトップ アプリケーションのヒープを増やす
User32.dll または Kernel32.dll の初期化に失敗する
SQL Server を実行しているコンピューターで多数のプロセスを実行すると予期しない現象が発生します。