정수 오버 플로우 란 무엇입니까?
정수 오버플로는 해당 범위의 끝에 도달하면 부호가 양에서 음으로 또는 그 반대로 전환되는 특정 컴퓨터 데이터 유형에서 발생하는 현상을 나타냅니다. 컴퓨터 범위에서 정수 데이터 유형은 원형 범위를 가지며 범위의 한쪽 끝에 도달하면 즉시 해당 범위의 다른 쪽 끝으로 이동합니다. 이것을 정수 오버플로라고도합니다.
부호있는 정수는 -2 31- (2 31 )-1 범위의 값을 보유 할 수 있습니다.이 정수는 (-2 31 )-1의 값을 가질 수 없습니다. 오히려 다음으로 증가하는 숫자는 범위의 다른 끝에 있습니다 (2 31-1 ). 범위 끝에서 음수에서 양수로의 변경은 정수 오버플로의 예입니다. 같은 토큰으로 정수는 2 31 값을 가질 수 없습니다. 이 값은 대신 범위의 다른 쪽 끝으로 전환되어 -2 31이 됩니다.
이 오버플로는 프로그래밍하는 동안 중요한 결과를 초래합니다. 배열은 정수 유형이 허용하는만큼만 인덱스를 가질 수 있으며 음수는 계산하지 않습니다. 프로그래머가 정수 유형이 허용하는 것보다 큰 배열을 작성하려고하면 정수 오버 플로우로 인해 음의 색인이 생성되므로 심각한 메모리 오류가 발생할 수 있습니다. 이는 C ++과 같이 배열을 명시 적으로 검사하는 언어가없는 언어에서 특히 위험합니다.
정수 오버 플로우가 발생하면 버퍼 오버 플로우, 힙 오버 플로우 및 스택 버퍼 오버 플로우와 같은 관련 유형의 오버 플로우가 발생할 수 있습니다. 이러한 모든 경우에있어서, 정수 오버 플로우는 그러한 구조가 보유 할 수있는 것보다 많은 데이터를 갖는 메모리 구조를 압도하는 작용을한다. 간단한 프로그램에서 이러한 오버 플로우는 종종 유효하지 않은 읽기 또는 유효하지 않은 쓰기 오류를 발생시키는 것 이상의 작업을 수행하지 않습니다. 그러나 해커가이 문제를 조작하면 더 심각한 문제를 일으킬 수있는 메모리 오류를 엔지니어링 할 수 있습니다.
대부분의 간단한 프로그램에서 정수 오버플로는 큰 문제가 아닙니다. 정수 유형의 한계는 충분히 많은 데이터를 한 번에 처리하지 않으면 오버플로 문제가 발생하지 않을 정도로 충분히 큽니다. 경우에 따라 카운터를 증분하는 경우와 같이 더 큰 범위의 더 큰 데이터 유형을 사용하여 오버플로를 완화 할 수 있습니다. 이론적으로 더 큰 데이터 유형은 결국 동일한 오버 플로우 문제를 겪을 수 있지만 데이터 유형 범위가 커질수록 그렇게 할 가능성은 더 작아집니다. 각 정수 데이터 유형의 범위는 다음 최소 크기의 두 배 이상이므로 추가 데이터를위한 충분한 공간이 있습니다.