L'unica risposta valida è vaga: "è troppo quando lo stack trabocca".
A meno che tu non abbia il controllo completo sull'implementazione di ogni linea di codice tra il punto di ingresso del programma e la funzione in questione, non puoi fare ipotesi sulla quantità di stack disponibile. Ad esempio, non è possibile garantire che la chiamata a questa funzione non causerà mai un overflow dello stack:
void break_the_camels_back()
{
int straw;
...
}
Lo stack 8 MiB di default sugli Unix moderni è un bel po 'di spazio in termini di stack, specialmente per qualcuno come me che è abbastanza di un geezer per ricordare le CPU con puntatori stack a 8 bit. La realtà pratica è che difficilmente riuscirai a farcela senza provarci. Se lo fai, il superamento del limite dello stack viene solitamente considerato una violazione della segmentazione e i sistemi con una gestione della memoria sufficiente a rilevarlo invieranno un SIGSEGV
quando ciò accade.
Hai un paio di opzioni. Per prima cosa non indovinare quanto stack è disponibile e chiedi al sistema. Qualunque cosa sia conforme a POSIX avrà una funzione getrlimit(2)
che ti indicherà il limite superiore. RLIMIT_STACK
è il limite specifico che desideri. Il secondo è monitorare il livello di stack utilizzato dai programmi e prendere decisioni sulle variabili automatiche rispetto all'allocazione dinamica della memoria in base a ciò. Per quanto ne so, non esistono funzioni standard per determinare la quantità di stack utilizzata, ma programmi come valgrind
possono analizzarlo per te.