Depende en gran medida de la arquitectura en la que se encuentre (32 o 64 bits) y si es multiproceso o no.
De forma predeterminada, en un único proceso de subprocesos, es decir, el subproceso principal creado por el sistema operativo en la hora de exec(), la pila generalmente crecerá hasta que llegue a otra cosa en el espacio de direcciones. Esto significa que generalmente es posible, en una máquina de 32 bits, tener, digamos 1G de stack.
Sin embargo, este NO es el caso en un proceso multiproceso de 32 bits. En procesamientos multiproceso, las pilas comparten espacio de direcciones y, por lo tanto, deben asignarse, por lo que normalmente reciben una pequeña cantidad de espacio de direcciones (por ejemplo, 1M) para que se puedan crear muchos hilos sin agotar el espacio de direcciones.
Así que en un proceso multiproceso, es pequeño y finito, en un único subproceso, es básicamente hasta que tocas algo más en el espacio de direcciones (que el mecanismo de asignación predeterminado intenta no pasar demasiado pronto).
En una máquina de 64 bits, por supuesto, hay mucho más espacio de direcciones para jugar.
En cualquier caso, siempre puede quedarse sin memoria virtual, en cuyo caso obtendrá un SIGBUS o SIGSEGV o algo así.
siempre puede juntar una prueba rápida para ver qué tan profunda es la pila. CountDepth (int d) {CountDepth (d + 1); } – Martin
@Martin: aunque la "profundidad" disminuye cuando realmente haces algo en la función, con variables. – GManNickG
eso es cierto, pero es una buena estimación. si realmente lo desea, puede contar el número de bits en uso en variables temporales y parámetros de método y resolverlo exactamente para una función determinada – Martin