Stack overflow: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
AushulzBot (discussione | contributi)
m Sostituisco template sconsigliato
Nessun oggetto della modifica
Riga 1:
In [[informatica]] uno '''stack overflow''' avviene quando è inrichiesto l'uso di una quantità troppo elevata di [[Memoria (informatica)|memoria]] nello [[stack]].

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 è lauan [[ricorsione]] con profondità eccessiva o una [[ricorsione]] infinita.

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