GNU/Linux >> Linux Esercitazione >  >> Linux

Perché su Linux moderno, la dimensione dello stack predefinita è così grande:8 MB (anche 10 su alcune distribuzioni)

Come altri hanno già detto, e come menzionato nel link che fornisci nella tua domanda, avere uno stack da 8 MiB non fa male a nulla (a parte il consumo di spazio degli indirizzi, su un sistema a 64 bit che non ha importanza).

Linux utilizza stack da 8 MiB da molto tempo; la modifica è stata introdotta nella versione 1.3.7 del kernel, nel luglio 1995. All'epoca era stata presentata come l'introduzione di un limite, prima non ce n'era uno:

Limita lo stack a un valore predefinito ragionevole:root può sempre aumentare questo limite se necessario. 8 MB sembrano ragionevoli.

Su Linux, il limite dello stack influisce anche sulla dimensione degli argomenti del programma e sull'ambiente, che sono limitati a un quarto del limite dello stack; il kernel impone un minimo di 32 pagine per gli argomenti e l'ambiente.

Per i thread, se il limite dello stack (RLIMIT_STACK ) è illimitato, pthread_create applica i propri limiti agli stack dei nuovi thread e, sulla maggior parte delle architetture, è inferiore a 8 MiB.


8MB è il virtuale dimensione della pila. Si verificherà un errore di pagina quando l'applicazione tenterà di utilizzare più stack di quanto attualmente allocato fisicamente. Al gestore degli errori di pagina del kernel verrà quindi assegnato un fisico pagina e quindi la tua applicazione continuerà.

Vedi https://unix.stackexchange.com/a/280865/21212 per una spiegazione completa.

Quindi ridurre la dimensione dello stack dovrebbe non hanno alcun effetto nel ridurre l'utilizzo della memoria fisica della tua applicazione.


Linux
  1. Perché l'output di alcuni programmi Linux non va né a STDOUT né a STDERR?

  2. BCRYPT - Perché le distribuzioni Linux non lo usano di default?

  3. Qual è l'ordine predefinito dell'ordinamento di Linux?

  4. Cosa impedisce alle distribuzioni di utilizzare l'ultimo kernel Linux?

  5. Perché le distribuzioni Linux non montano di default tmpfs con inode infiniti?

Come ottenere la dimensione di una directory in Linux

Gestione dello swap nel moderno sistema Linux

Come trovare la dimensione totale di una directory in Linux

Come modificare la shell predefinita nel sistema Linux

TrueCrypt sulle moderne distribuzioni Linux

Una delle distribuzioni Linux più belle e facili da usare migliora ancora