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.