Skip to main content

Cos'è uno stack overflow?

Lo stack Overflow è un errore di programmazione in cui un tentativo di scrivere i dati su un particolare blocco di memoria fallisce perché non è rimasto spazio nel blocco.Questo tipo di errore si verifica allo stesso modo degli overflow del buffer, degli overflow heap e degli overflow del buffer stack.La differenza tra questi tipi di errori dipende dalla struttura dei dati del computer utilizzata e la caratteristica comune è che si verifica un tentativo di scrivere più dati di quanti non vi sia spazio disponibile per tenerlo.Lingua del computer utilizzato e i macchinari per i report di errore disponibili.In C ++, un overflow dello stack spesso si manifesta come un errore di segmentazione e spesso non ci sono ulteriori informazioni fornite per determinare dove o come si è verificato l'overflow.Un overflow in Java si traduce spesso in un arresto anomalo della macchina virtuale che emette un file di errore ragionevolmente dettagliato.Indipendentemente dal linguaggio in cui si verifica un overflow, l'overflow può quasi sempre essere corretto da un adeguato debug e identificazione della fonte di overflow originale.

Lingue per computer che offrono una gestione esplicita della memoria sono spesso più facili da salvaguardare dallo stack.La pratica di programmazione ampiamente accettata di solito impone che per ogni segmento di memoria si alloca un programma, il programma dovrebbe anche eliminare se stesso.C ++ consente questo meccanismo e un attento monitoraggio in questo modo può ridurre al minimo la quantità di memoria che un programma utilizza.Le lingue che non offrono una gestione esplicita della memoria e invece utilizzano una gestione implicita della memoria, sono più difficili da proteggere dagli errori di overflow dello stack.Java gestisce la propria memoria all'interno della sua macchina virtuale, quindi i dati non possono essere esplicitamente eliminati a volontà di fare spazio a di più.

Un errore comune dei programmatori alle prime armi è supporre che un overflow dello stack non possa avvenire nei linguaggi informatici che gestiscono la propria gestione della memoria.Mentre questo sembra plausibile all'inizio, in realtà non è così.I linguaggi con una gestione implicita della memoria hanno spesso collezionisti di immondizia che liberano blocchi di memoria inutili, ma questi collezionisti di immondizia non sempre funzionano al momento in cui un programmatore si aspetta.Affidarsi ai collezionisti di immondizia è relativamente pericoloso e non può sempre proteggere un programma da un errore di overflow.

Gli errori di overflow possono essere cataclismici e fermare un intero programma, oppure possono essere quasi silenziosi e consentire a un programma di continuare.Questi secondi tipi di errori sono spesso i più difficili da trovare perché può verificarsi un errore che proveniva da un overflow molte righe di codice prima.Un overflow dello stack non richiede spesso la ricerca attraverso un intero programma, ma più un programma più lungo può essere eseguito dopo un overflow, più è difficile l'errore di trovare e correggere.