GNU/Linux >> Linux の 問題 >  >> Linux

最近の Linux では、デフォルトのスタック サイズが 8 MB (一部のディストリビューションでは 10 MB) と非常に大きいのはなぜですか?

他の人が言ったように、また質問で提供したリンクに記載されているように、8MiB スタックを持っていても何も害はありません (64 ビット システムでは問題にならないアドレス空間を消費することを除けば)。

Linux は非常に長い間 8MiB スタックを使用してきました。この変更は、1995 年 7 月にカーネルのバージョン 1.3.7 で導入されました。当時は制限が導入されたものとして提示されましたが、以前は制限がありませんでした:

<ブロック引用>

適切なデフォルト値でスタックを制限してください:root は、必要に応じてこの制限をいつでも増やすことができます.8MB が妥当と思われます.

Linux では、スタック制限はプログラム引数のサイズと環境にも影響し、スタック制限の 4 分の 1 に制限されます。カーネルは、引数と環境に最低 32 ページを強制します。

スレッドの場合、スタック制限 (RLIMIT_STACK ) は無制限、pthread_create 新しいスレッドのスタックに独自の制限を適用します — ほとんどのアーキテクチャでは、8MiB 未満です。


8MB は 仮想 スタックのサイズ。アプリケーションが現在物理的に割り当てられているよりも多くのスタックを使用しようとすると、ページ フォールトが発生します。カーネルのページ フォールト ハンドラは、物理

完全な説明については、https://unix.stackexchange.com/a/280865/21212 を参照してください。

したがって、スタック サイズを減らすことはすべき アプリケーションの物理メモリ使用量を減らす効果はありません。


Linux
  1. 次の方法でコアファイルの制限サイズが変更されないのはなぜですか?

  2. Linux ソートのデフォルトの順序は何ですか?

  3. ディストリビューションが最新の Linux カーネルを使用できない原因は何ですか?

  1. なぜLinuxなのか? –Linuxに変換するいくつかの理由

  2. Pam_unix2 /一部のディストリビューションに存在しないのはなぜですか?

  3. Linux でデフォルトのシェルを変更する方法

  1. 最大スタック サイズを確認するにはどうすればよいですか?

  2. Linux ls -l コマンドのデフォルトのサイズ単位は何ですか

  3. 一部の Linux プログラムの出力が STDOUT にも STDERR にも出力されないのはなぜですか?