Es ist nur eine Standardgröße. Wenn Sie mehr benötigen, können Sie mehr erhalten - meistens, indem Sie den Linker anweisen, zusätzlichen Stapelspeicher zuzuweisen.
Der Nachteil großer Stapel besteht darin, dass beim Erstellen vieler Threads jeweils ein Stapel benötigt wird. Wenn alle Stapel Multi-MBs zuweisen, diese jedoch nicht verwenden, wird der Speicherplatz verschwendet.
Sie müssen die richtige Balance für Ihr Programm finden.
Einige Leute, wie @BJovke, glauben, dass der virtuelle Speicher im Wesentlichen frei ist. Es ist wahr, dass Sie keinen physischen Speicher benötigen, der den gesamten virtuellen Speicher sichert. Sie müssen in der Lage sein, mindestens Adressen an den virtuellen Speicher zu vergeben.
Auf einem typischen 32-Bit-PC entspricht die Größe des virtuellen Speichers jedoch der Größe des physischen Speichers, da für jede virtuelle oder nicht virtuelle Adresse nur 32 Bit zur Verfügung stehen.
Da alle Threads in einem Prozess denselben Adressraum verwenden, müssen sie ihn zwischen ihnen aufteilen. Und nachdem das Betriebssystem seinen Teil dazu beigetragen hat, bleiben "nur" 2-3 GB für eine Anwendung übrig. Und diese Größe ist die Grenze sowohl für den physischen als auch für den virtuellen Speicher, da es einfach keine Adressen mehr gibt.