x86_64 では分割スタックは不要ですか?
ランタイム モデルにおける分割スタックの話題により、次のような 64 ビット アーキテクチャでの分割スタックの必要性について疑問が生じています。 x86_64。一部の意見では、利用可能なアドレス空間が拡張されたため、分割スタックは不要になったと示唆しています。
質問 1 の答え: 意見の解釈
はい、で引用されている意見です。この質問は、x86_64 アーキテクチャでは分割スタックが不要であることを暗示しています。 32 ビット システムでの「数百万のスレッド」と「狭い使用例」への言及は、64 ビット システムの大きなアドレス空間が十分な数のスタック範囲に対応できることを示しています。
回答質問 2: 不必要の根拠
仮想アドレス空間が大幅に拡大したため、64 ビット アーキテクチャでは分割スタックは必要なくなりました。これにより、各スタックが 32 ビット アドレス空間全体に匹敵する専用の大きなアドレス範囲を持つことが可能になります。
最新のフラット メモリ モデルでは、ハードウェアのメモリ管理ユニット (MMU) が仮想アドレスを物理アドレスに変換します。記憶の場所。 x86_64 では、各スタックに仮想アドレス空間の大きなチャンクを割り当て、最初のページのみを実際の RAM にマッピングする方が効率的であることがわかっています。
このアプローチにより、連続した仮想アドレス空間を使用して、必要に応じてスタックを拡大および縮小できます。アドレス。スタックが指定されたしきい値を超えて拡大または縮小すると、OS は MMU を再構成して、仮想メモリの追加ページを実メモリにマップできます。
これらのしきい値を慎重に選択することで、スタックは O(1 を持つ動的配列のように動作できます) ) 平均的なスタック操作の複雑さ。使用するメモリのみを消費しながら、任意のサイズまで拡張できる数百万のスタックをサポートするという利点が維持されます。
以上がx86_64 アーキテクチャでは分割スタックは必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。