Stack overflow: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Sostituisco template sconsigliato |
Nessun oggetto della modifica |
||
Riga 1:
In [[informatica]] uno '''stack overflow''' avviene quando è
In molti [[linguaggi di programmazione]] lo [[stack delle chiamate]] contiene una quantità limitata di memoria, che viene fissata di solito all'avvio del programma. La dimensione dello stack dipende da molteplici fattori, inclusi il linguaggio di programmazione, l'[[Architettura (computer)|architettura]] della macchina, l'uso del [[multithreading]], e la disponibilità di memoria nel sistema. Quando viene usata troppa memoria nello stack si dice che avviene un'[[overflow]], e tipicamente come conseguenza di questa situazione si verifica un [[Crash (informatica)|crash]] del programma<ref name="fortran1"> {{cite web | last = Burley
| first = James Craig
Riga 10 ⟶ 12:
| title = Understanding Stack Overflow
| url=http://www.devx.com/tips/Tip/14276
| date = 2000-09-05 }}</ref>: la ricorsione infinita e l'uso di variabili di stack molto grandi.
==Ricorsione infinita==
La causa più comune di uno stack overflow è
I linguaggi che implementano la tecnica [[Algoritmo_ricorsivo#Eliminazione_della_ricorsione|tail recursion]], come ad esempio il linguaggio [[Scheme]], permettono una particolare ricorsione infinita che possa essere eseguita senza stack overflow. Questo avviene poiché le chiamate che fanno uso di tail-recursion non richiedono uno spazio aggiuntivo nello stack<ref name="tailRecur">{{cite web | title = An Introduction to Scheme and its Implementation
| url=http://www.federated.com/~jim/schintro-v14/schintro_73.html
Riga 20 ⟶ 24:
==Variabili di stack molto grandi==
L'altra causa principale dello stack overflow è il tentativo di allocare più memoria nello stack di quella che è disponibile. Questo avviene tipicamente quando si crea un [[array]] di [[variabile locale|variabili locali]] molto grande. Per questo motivo gli array più grandi di qualche [[kilobyte]] dovrebbero essere allocati [[allocazione dinamica della memoria|dinamicamente]] anziché allocarli come variabili locali<ref name="onlamp">{{cite web
| last = Feldman
| first = Howard
|