GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist die Standardstapelgröße unter modernem Linux so riesig - 8 MB (bei einigen Distributionen sogar 10)

Wie andere gesagt haben und wie in dem Link erwähnt, den Sie in Ihrer Frage angeben, schadet ein 8-MiB-Stack nichts (abgesehen vom Verbrauch von Adressraum – auf einem 64-Bit-System, das keine Rolle spielt).

Linux verwendet seit langem 8-MiB-Stacks; die Änderung wurde im Juli 1995 in Version 1.3.7 des Kernels eingeführt. Damals wurde sie als Einführung eines Limits präsentiert, vorher gab es keines:

Beschränken Sie den Stack auf eine vernünftige Standardeinstellung:Root kann diese Grenze bei Bedarf immer erhöhen. 8 MB erscheinen vernünftig.

Unter Linux wirkt sich das Stack-Limit auch auf die Größe der Programmargumente und der Umgebung aus, die auf ein Viertel des Stack-Limits begrenzt sind; der Kernel erzwingt ein Minimum von 32 Seiten für die Argumente und die Umgebung.

Wenn für Threads das Stack-Limit (RLIMIT_STACK ) ist unbegrenzt, pthread_create wendet seine eigenen Grenzen auf die Stacks neuer Threads an – und auf den meisten Architekturen sind das weniger als 8 MiB.


8 MB ist das virtuelle Größe des Stapels. Ein Seitenfehler tritt auf, wenn Ihre Anwendung versucht, mehr Stack zu verwenden, als derzeit physisch zugewiesen ist. Der Page-Fault-Handler des Kernels wird dann eine physische zugewiesen Seite und dann wird Ihre Bewerbung fortgesetzt.

Siehe https://unix.stackexchange.com/a/280865/21212 für eine vollständige Erklärung.

Reduzieren Sie also Ihre Stapelgröße sollte wirken sich nicht auf die Reduzierung der physischen Speichernutzung Ihrer Anwendung aus.


Linux
  1. Warum Linux? – Einige Gründe für die Umstellung auf Linux

  2. Warum ändert der folgende Weg die Größe der Kerndatei nicht?

  3. So ändern Sie die Standard-Shell in Linux

  4. Wie finde ich die maximale Stapelgröße?

  5. Was ist die Standardreihenfolge der Linux-Sortierung?

So erhalten Sie die Größe eines Verzeichnisses in Linux

Verwalten von Swap im modernen Linux-System

So ermitteln Sie die Gesamtgröße eines Verzeichnisses in Linux

So ändern Sie die Standard-Shell im Linux-System

TrueCrypt auf modernen Linux-Distributionen

Eine der schönsten und benutzerfreundlichsten Linux-Distributionen wird noch besser