Por exemplo, no OSX, é ainda menor que 512k.
Existe algum tamanho recomendado, tendo em mente que o aplicativo não usa recursão e não aloca muitas variáveis de pilha ?
Eu sei que a pergunta é muito ampla e depende muito do uso, mas ainda queria perguntar, pois estava me perguntando se há algum motivo oculto/interno/do sistema por trás desse grande número.
Eu queria saber, pois pretendo alterar o tamanho da pilha para 512 KiB no meu aplicativo - isso ainda parece um número enorme para isso, mas é muito menor que 8 MiB - e levará a uma diminuição significativa da memória virtual do processo, como eu tem muitos encadeamentos (E/S).
Eu também sei que isso não dói muito, bem explicado aqui : Tamanho padrão da pilha para pthreads
Como outros já disseram, e como mencionado no link que você forneceu em sua pergunta, ter uma pilha de 8MiB não prejudica nada (além de consumir espaço de endereço - em um sistema de 64 bits, isso não importa).
O Linux usa pilhas de 8MiB há muito tempo; a mudança foi introduzida na versão 1.3.7 do kernel, em julho de 1995. Naquela época era apresentada como introdução de um limite, antes não existia:
No Linux, o limite da pilha também afeta o tamanho dos argumentos do programa e o ambiente, que são limitados a um quarto do limite da pilha ; o kernel impõe um mínimo de 32 páginas para os argumentos e o ambiente.
Para encadeamentos, se o limite de pilha (
RLIMIT_STACK
) for ilimitado,pthread_create
aplica seus próprios limites às pilhas de novos encadeamentos — e na maioria das arquiteturas, isso é inferior a 8 MiB.8 MB é o tamanho virtual da pilha. Uma falha de página ocorrerá quando seu aplicativo tentar usar mais pilha do que a atualmente alocada fisicamente. O manipulador de falhas de página do kernel alocará uma página física e seu aplicativo continuará.
Consulte https://unix.stackexchange.com/a/280865/21212 para obter uma explicação completa.
Portanto, reduzir o tamanho da pilha não deve ter efeito na redução do uso de memória física do seu aplicativo.