GNU/Linux >> Znalost Linux >  >> Linux

Proč je na moderním Linuxu výchozí velikost zásobníku tak obrovská - 8 MB (u některých distribucí dokonce 10)

Jak řekli jiní, a jak je zmíněno v odkazu, který uvádíte ve své otázce, 8MiB zásobník nic nezkazí (kromě spotřeby adresního prostoru — na 64bitovém systému na tom nezáleží).

Linux používá 8MiB zásobníky po velmi dlouhou dobu; změna byla představena ve verzi 1.3.7 jádra v červenci 1995. Tehdy to bylo prezentováno jako zavedení limitu, dříve žádný nebyl:

Omezte zásobník na nějakou rozumnou výchozí hodnotu:root může tento limit v případě potřeby vždy zvýšit. 8 MB se zdá rozumné.

V Linuxu limit zásobníku ovlivňuje také velikost argumentů programu a prostředí, které jsou omezeny na jednu čtvrtinu limitu zásobníku; jádro vyžaduje minimálně 32 stránek pro argumenty a prostředí.

U vláken, pokud je limit zásobníku (RLIMIT_STACK ) je neomezený, pthread_create aplikuje své vlastní limity na zásobníky nových vláken – a na většině architektur je to méně než 8 MiB.


8 MB je virtuální velikost zásobníku. Chyba stránky nastane, když se vaše aplikace pokusí použít více zásobníku, než je aktuálně fyzicky přiděleno. Obsluha chyb stránky jádra pak přidělí fyzické a poté bude vaše aplikace pokračovat.

Úplné vysvětlení najdete na https://unix.stackexchange.com/a/280865/21212.

Takže by mělo zmenšit velikost zásobníku nemají žádný vliv na snížení využití fyzické paměti vaší aplikací.


Linux
  1. Jak změnit výchozí prostředí v Linuxu

  2. Jaká je výchozí jednotka velikosti v příkazu linux ls -l

  3. Proč výstup některých linuxových programů nejde ani do STDOUT, ani do STDERR?

  1. BCRYPT – Proč jej distribuce Linuxu nepoužívají ve výchozím nastavení?

  2. Jaké je výchozí pořadí řazení Linuxu?

  3. Co brání distribucím používat nejnovější linuxové jádro?

  1. Proč následující způsob nezmění velikost základního souboru?

  2. Pam_unix2 / Proč u některých distribucí neexistuje?

  3. Jak zjistím maximální velikost zásobníku?