Motivi per Stack Overflow

May 18

Motivi per Stack Overflow


overflow dello stack è un errore di applicazione che si verifica ogni volta che troppa memoria viene allocata sulla chiamata pila di esecuzione di un'applicazione. Nel sistema operativo, questo stack di chiamate è letteralmente una "pila di memoria" in cui sono memorizzati variabili di programmazione e chiamate a procedure per l'utilizzo nell'ambito di applicazione corrente di esecuzione. Le cause primarie di overflow dello stack sono infinite ricorsione e pila variabili che sono troppo grandi. Una terza causa, anche se meno probabile, può verificarsi a causa della perdita del puntatore dello stack in memoria.

Ricorsione infinita

ricorsione infinita causa lo stack di chiamate di trabocco nella maggior parte dei linguaggi di programmazione. Quando una procedura o funzione chiama un'altra procedura o funzione, le informazioni precedenti nello stack di chiamate viene mantenuto e le informazioni dalla nuova funzione è allocato in cima alla pila. Quando una funzione che si chiama in modo ricorsivo senza un chiaro mezzo di risoluzione, l'applicazione verrà allocare più memoria sullo stack continuamente fino a più memoria viene allocata quella disponibile sullo stack, con conseguente overflow dello stack.

Molto grandi variabili di stack

Le variabili dichiarate nello stack includono variabili di input in un procedimento, il valore di ritorno per la procedura e le eventuali variabili membro utilizzate per i calcoli. Questo può provocare overflow di stack se la dimensione complessiva della chiamata di procedura e le sue variabili è maggiore della memoria stack disponibile.

Perdita Stack Pointer

Pila perdita puntatore si verifica ogni volta che la memoria sullo stack viene danneggiato. Ciò può verificarsi, cercando di accedere funzioni o dati in memoria che in precedenza sono stati cancellati, per esempio. Se questo accade, una forma unica di ricorsione si verifica, con conseguente applicazione tentativo di trovare le informazioni di base di un dato pezzo di dati. Poiché le informazioni tecnicamente non esiste, il comportamento dell'applicazione diventa indefinito, e una serie infinita di chiamate di funzione diventano possibili. Questa limitazione si verifica principalmente solo in basso livello, linguaggi orientati agli oggetti, come ad esempio C ++.