Sim pilhas crescem dinamicamente. A pilha está no topo da memória crescendo para baixo em direção ao heap.
--------------
| Stack |
--------------
| Free memory|
--------------
| Heap |
--------------
.
.
O heap cresce para cima (sempre que você faz malloc) e a pilha cresce para baixo à medida que novas funções são chamadas. O heap está presente logo acima da seção BSS do programa. O que significa que o tamanho do seu programa e a maneira como ele aloca memória no heap também afetam o tamanho máximo da pilha para esse processo. Normalmente, o tamanho da pilha é ilimitado (até as áreas de pilha e pilha se encontrarem e / ou sobrescreverem, o que causará um estouro de pilha e SIGSEGV: -)
Isto é apenas para os processos do usuário, A pilha do kernel é sempre corrigida (geralmente 8KB)