質問:
理論的には利用可能な RAM までヒープ メモリを割り当てることができますが、なぜスタック メモリのサイズは非常に限られており、通常は約 1 MB ですか?
回答:
ランダムに割り当てることができるヒープとは異なり、スタックは連続して格納する必要があります。記憶の場所。これは、すぐに使用されない場合でも、仮想アドレス空間の大部分をスタック用に予約する必要があることを意味します。
たとえば、2GB の仮想アドレス空間を持つ 32 ビット アプリケーションの場合、2MB のスタックsize により、スレッドの最大数は 1024 に制限されます。スタック サイズを 100MB に増やすと、スレッド制限はさらに約 20 に減ります。これは、Web サーバーや GUI プログラムなどのアプリケーションでは問題になる可能性があります。
興味深いことに、この制限もまた、 64 ビット プラットフォームでも存続します。技術的な理由は不明ですが、開発者は、スタック上での巨大なオブジェクトの割り当てを回避し、必要に応じてスタック サイズを手動で調整するなど、スタックのベスト プラクティスに慣れていると推測されます。したがって、64 ビット システムでの「巨大な」スタック サポートの必要性はまだ解明されていません。
以上が理論上はヒープ メモリ用の RAM が利用可能であるにもかかわらず、スタック メモリ サイズが通常約 1 MB に制限されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。