Che cos'è un overflow di numeri interi?
L'overflow di numeri interi si riferisce al fenomeno che si verifica in alcuni tipi di dati di computer in cui i loro segni passano da positivi a negativi, o viceversa, quando raggiungono le estremità dei rispettivi intervalli applicabili. Negli intervalli di computer, i tipi di dati interi hanno intervalli circolari e quando raggiungono un'estremità dell'intervallo, si spostano immediatamente sull'altra estremità dell'intervallo. Questo è anche chiamato overflow di numeri interi.
Un numero intero con segno può contenere un intervallo di valori compreso tra -2 31 e (2 31 ) - 1. Questo numero intero non può avere un valore di (-2 31 ) - 1; piuttosto, il numero successivo al quale incrementa si trova all'altra estremità del suo intervallo: (2 31 - 1). Il passaggio da negativo a positivo alla fine del suo intervallo è un esempio di overflow di numeri interi. Allo stesso modo, un numero intero non può avere un valore di 2 31 ; questo valore passerebbe invece all'altro capo del suo intervallo e diventerebbe -2 31 .
Questo overflow ha conseguenze significative durante la programmazione. Un array può contenere solo un numero di indici pari a quello consentito dal tipo intero e gli indici negativi non contano. Se un programmatore tenta di creare una matrice più grande di quella consentita dal tipo intero, possono verificarsi errori di memoria significativi poiché l'overflow dei numeri interi comporterebbe un indice negativo. Ciò è particolarmente pericoloso nei linguaggi che non hanno limiti espliciti alla ricerca di array, come C ++.
Quando si verifica un overflow di numeri interi, possono verificarsi tipi correlati di overflow come overflow del buffer, overflow dell'heap e overflow del buffer dello stack. In tutti questi casi, l'overflow dei numeri interi agisce per sopraffare le strutture di memoria con più dati di quelli che è possibile concepire. Questi overflow, nei programmi semplici, spesso non fanno molto di più che causare un errore di lettura o scrittura non valido. La manipolazione di questo problema da parte degli hacker, tuttavia, può progettare errori di memoria che possono causare problemi più gravi.
Nella maggior parte dei programmi semplici, l'overflow di numeri interi non è un grosso problema. I limiti del tipo intero sono sufficientemente grandi da non far entrare in gioco il problema dell'overflow a meno che non vengano gestiti molti dati contemporaneamente. In alcuni casi, l'overflow può essere mitigato, come nel caso dei contatori incrementali, utilizzando un tipo di dati più grande con un intervallo maggiore. Il tipo di dati più grande potrebbe, in teoria, eventualmente incontrare lo stesso problema di overflow, ma man mano che gli intervalli di tipi di dati diventano più grandi, le possibilità di farlo si riducono. L'intervallo di ciascun tipo di dati integer è almeno il doppio della dimensione del successivo più piccolo, quindi vi è ampio spazio per dati aggiuntivi.