64ビットシステムでLinuxスタックサイズ制限がそれほど低いのはなぜですか?

64ビットシステムでLinuxスタックサイズ制限がそれほど低いのはなぜですか?

私が知る限り、Linuxスタックサイズは8MBに制限されていますが、64ビットシステムでは、たとえば4GBに大きく増やすことができない理由はありません。これにより、プログラマは本質的にスタックに大きな値を格納したり、反復の代わりに再帰アルゴリズムを使用することを心配する必要がなくなります。

また、スタック割り当てがヒープ割り当てよりもはるかに高速であるため、高速にする必要があります。スタックに割り当てられたデータ構造の全く新しいクラスを見ることができます。std::stack_vector<T>スタックに割り当てられたと想像してください。

見えない欠点はありますか?それとも誰も変化を引き起こすほど興味を持っていませんか?

ベストアンサー1

最初は仮想メモリを節約するためにスタックサイズを制限することができますが、追加の利点は無限再帰をキャプチャすることです。実際に深い再帰を必要とするアルゴリズムは一般的ではないため、大きなスタックを使用するとバグになる可能性が高くなります。 64ビットアーキテクチャに切り替えても、この状況は減少しません。

一部のデータ型が大きいため、アルゴリズムは64ビットモードでより多くのスタックスペースを使用できますが、スタックサイズの制限が問題になるほど多くはありません。

実際、これらの制限は、大規模なアレイがスタックに割り当てられるのを防止するので、より効率的である。しかし、上記の無限再帰検査を失うほど、この問題を解決することは重要ですか?

おすすめ記事