Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> Computer Programming Languages >> .

Che cosa è Stack Overflow ?

Un overflow dello stack è un tipo di errore di programmazione che si verifica quando un programma tenta di allocare più memoria sullo stack di chiamate di quella disponibile . E 'un errore potenzialmente grave che causa il programma incriminato di crash e di solito è il risultato di uno dei due errori di progettazione . La pila

La pila si riferisce ad una sezione di memoria che viene utilizzata per memorizzare le informazioni sulle funzioni di un programma . Le dimensioni e dettagli tecnici della pila saranno variano a seconda del linguaggio di programmazione , compilatore , il sistema operativo e il tipo di processore , e questi dettagli sono generalmente nascosti al programmatore nella maggior parte dei linguaggi di alto livello .
Esempio Stack

Si consideri il seguente esempio in pseudocodice :
funzione

a { 1 . funzione b.2 chiamare . chiamare la funzione c . }

funzione b { 1 . funzione c.2 chiamare . Stampa Spot . }

Funzione c { 1 . Tiratura . }

Dal momento che ogni funzione può chiamare altre funzioni , la pila esiste per tenere traccia di dove nella funzione di genitore di continuare dopo che un bambino funzione restituisce. Questo esempio , se si fermò all'interno funzione c , può avere uno stack che sembra qualcosa di simile :

> A1 ---> B1 -------- > C1

Dal momento che la prima riga della funzione Una funzione chiamate B , e la prima linea della funzione B chiamate di funzione C. Dopo la funzione C si concluderà , il programma continuerà il backup della catena , in esecuzione B2 e infine A2 .

Infinite ricorsione

un overflow dello stack si verifica quando un programma tenta di archiviare troppe informazioni nello stack. La causa più comune di un overflow dello stack è un errore di progettazione chiamato ricorsione infinita . Si consideri il seguente esempio in pseudocodice :
funzione

A { 1 . funzione A. }

E la pila risultante chiamare :

- > A1 ---> A1 -------- > A1 ------- ------- > A1 (e così via ) per

Coloro che hanno familiarità con la programmazione computer riconoscerà questo come una variazione sul ciclo infinito , ad eccezione , piuttosto che correre per sempre , questo programma finalmente consumare tutto la memoria sullo stack , causando una caduta e un errore di overflow dello stack .
prevenzione

errori di overflow dello stack in genere si verificano quando si tenta di implementare algoritmi ricorsivi , e la chiave per evitare la maggior parte degli errori è quello di garantire che la seguente è vero per tutte le implementazioni ricorsive : la funzione ricorsiva deve contenere una condizione di uscita che non crea un altro strato di ricorsione , e la funzione ricorsiva deve essere progettato in modo che ogni strato di ricorsione aggiunto deve portare la funzione più vicino alla condizione di uscita .
grandi variabili locali

Un altro , molto più rara causa di errori di overflow dello stack è la dichiarazione di variabili locali di grandi dimensioni , di solito in forma di matrici contenenti centinaia di migliaia, o milioni , di elementi . Il modo più semplice per evitare overflow dello stack in questa situazione è quello di utilizzare i puntatori e l'allocazione dinamica della memoria per evitare di dichiarare i dati nello stack quando tali operazioni intensivo della memoria si impone.

 

Programmazione © www.354353.com