分割スタック: AMD64 アーキテクチャでは必要か不必要か?
64 ビット アーキテクチャ、特に AMD64 では分割スタックは不要であるという概念明示的な発言なしに議論の中で表面化した。しかし、Ian Lance Taylor や bstrie などの専門家は、このことについてほのめかしています。
暗黙の議論とは何ですか?
暗黙の議論は、膨大な 64 ビット仮想AMD64 システム上のアドレス空間により、スタックを分割する必要がなくなります。 Taylor 氏は、各スレッドが相当量のスタック領域を予約する必要がなくなるため、マルチスレッド プログラムはメモリ使用量を大幅に削減して実行できると示唆しています。
Bstrie 氏は、分割スタックのオーバーヘッドとその限られた使用例を認めています。 32 ビット環境では、最新のシステムにとって魅力が薄れています。
なぜ分割スタックは不要ですか?
分割スタックは、使用可能なアドレス空間が限られているための解決策として開発されました。 32 ビット システム。このようなシステムでは、各スレッドに独自のスタックが必要であり、すべてのスレッドのスタック サイズの合計により、使用可能なメモリがすぐに消費されてしまう可能性があります。
ただし、AMD64 アーキテクチャでは、64 ビットのアドレス空間が非常に大きいため、それぞれのスタック アドレス範囲は、32 ビット アドレス空間全体に相当するサイズです。この十分なアドレス空間により、複数のスレッドを効果的に管理するためにスタックを分割する必要がなくなります。
実装の詳細
AMD64 システムでは、仮想メモリを備えたフラット メモリ モデルが採用されています。変換はハードウェア メモリ管理ユニット (MMU) によって処理されます。最初に最初のページ (4 KB) のみを物理 RAM にマッピングし、スタックごとに大きな仮想アドレス空間チャンクを予約する方が大幅に効率的です。
このアプローチにより、連続した仮想アドレス空間を使用してスタックが必要に応じて拡張および縮小できます。アドレス。 OS は、スタックの拡大または縮小に応じてページを実際の RAM にマップするように MMU を動的に構成し、メモリの効率的な使用を確保します。
以上がAMD64 の分割スタック: 過去の遺物か、それともまだ必要か?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。