整數溢出是指在某些計算機數據類型中,當它們到達其適用范圍的末端時,它們的符號從正變為負,或反之亦然。在計算機范圍中,整數數據類型具有循環范圍,當它們達到其范圍的一端時,它們會立即移動到其范圍的另一端。這也稱為整數...
整數溢出是指在某些計算機數據類型中,當它們到達其適用范圍的末端時,它們的符號從正變為負,或反之亦然。在計算機范圍中,整數數據類型具有循環范圍,當它們達到其范圍的一端時,它們會立即移動到其范圍的另一端。這也稱為整數溢出。C沒有顯式的數組邊界檢查。有符號整數可以包含-231到(231)-1之間的值范圍。此整數的值不能為(-231)-1;相反,它遞增到的下一個數字是在其范圍的另一端:(231)-1).在其范圍的末尾從負變為正是整數溢出的一個例子。同樣地,一個整數的值不能是231;這個值會切換到它的范圍的另一端變成-231。這個溢出在編程時會產生嚴重的后果。一個數組只能在整數類型允許,負索引不計算在內。如果程序員試圖創建一個大于整數類型允許的數組,則可能會發生嚴重的內存錯誤,因為整數溢出會導致負索引。這在沒有顯式數組邊界檢查的語言中尤其危險,與C一樣,當發生整數溢出時,也會發生相關類型的溢出,如緩沖區溢出、堆溢出和堆棧緩沖區溢出。在所有這些情況下,整數溢出會用比這些結構所能容納的更多的數據來覆蓋內存結構。這些溢出,在簡單的程序中,除了引起無效的讀或寫錯誤外,不要做太多的事情。然而,黑客對這個問題的處理會導致內存錯誤,從而導致更嚴重的問題。在大多數簡單的程序中,整數溢出不是主要問題整數類型的限制足夠大,除非同時處理大量數據,否則溢出問題不會起作用。在某些情況下,可以通過使用更大范圍的更大數據類型來緩解溢出,如遞增計數器的情況。理論上,較大的數據類型可以,最終會遇到同樣的溢出問題,但隨著數據類型范圍的增大,出現這種情況的可能性也會越來越小。每個整數數據類型范圍的大小至少是下一個最小值的兩倍,因此有足夠的空間存儲額外的數據
-
發表于 2020-08-07 13:24
- 閱讀 ( 1506 )
- 分類:電腦網絡