스택 오버 플로우 란 무엇입니까?
스택 오버플로는 블록에 남은 공간이 없기 때문에 특정 메모리 블록에 데이터를 쓰려는 시도가 실패하는 프로그래밍 오류입니다. 이 유형의 오류는 버퍼 오버 플로우, 힙 오버 플로우 및 스택 버퍼 오버 플로우와 동일한 방식으로 발생합니다. 이러한 유형의 오류의 차이는 사용중인 컴퓨터 데이터 구조에 따라 다르며 일반적인 특징은 보유 할 수있는 공간보다 많은 데이터를 쓰려고 시도한다는 것입니다.
스택 오버플로의 증상은 사용 된 컴퓨터 언어 및 사용 가능한 오류보고 장치에 따라 달라질 수 있습니다. C ++에서 스택 오버플로는 종종 세그멘테이션 오류로 표시되며 오버플로 발생 위치 또는 방법을 결정하기 위해 추가 정보가없는 경우가 많습니다. Java에서 오버플로가 발생하면 가상 시스템이 충돌하여 상당히 자세한 오류 파일이 생성되는 경우가 종종 있습니다. 오버플로가 발생하는 언어에 관계없이, 오버플로는 거의 항상 원래 오버플로 소스의 적절한 디버깅 및 식별을 통해 수정할 수 있습니다.
명시적인 메모리 관리 기능을 제공하는 컴퓨터 언어는 종종 스택 오버플로를 방지하기가 더 쉽습니다. 일반적으로 널리 사용되는 프로그래밍 관행은 프로그램이 할당하는 모든 메모리 세그먼트에 대해 프로그램도 자체를 삭제해야한다고 지시합니다. C ++는이 메커니즘을 허용하며, 이러한 방식으로주의 깊은 모니터링은 프로그램이 사용하는 메모리의 양을 최소로 유지할 수 있습니다. 명시 적 메모리 관리를 제공하지 않고 암시 적 메모리 관리를 사용하는 언어는 스택 오버플로 오류로부터 보호하기가 더 어렵습니다. Java는 가상 머신 내에서 자체 메모리를 처리하므로 더 많은 공간을 확보하기 위해 데이터를 마음대로 삭제할 수 없습니다.
초보자 프로그래머의 일반적인 실수는 자체 메모리 관리를 처리하는 컴퓨터 언어에서 스택 오버플로가 발생할 수 없다고 가정하는 것입니다. 처음에는 그럴듯 해 보이지만 실제로는 그렇지 않습니다. 암시 적 메모리 관리 기능이있는 언어에는 종종 불필요한 메모리 블록을 해제하는 가비지 수집기가 있지만 프로그래머가 예상 할 때 이러한 가비지 수집기가 항상 작동하지는 않습니다. 가비지 수집기에 의존하는 것은 상대적으로 위험하며 항상 오버플로 오류로부터 프로그램을 보호 할 수는 없습니다.
오버플로 오류는 격변 적이며 전체 프로그램을 중단 시키거나 거의 침묵하여 프로그램을 계속 진행할 수 있습니다. 이러한 두 번째 유형의 오류는 종종 여러 줄의 코드 오버플로로 인해 오류가 발생할 수 있기 때문에 찾기가 가장 어렵습니다. 스택 오버플로는 종종 전체 프로그램을 검색해야 할 필요는 없지만 오버플로 후 프로그램을 더 오래 실행할 수 있으면 오류를 찾아 수정하기가 더 어려울 수 있습니다.