메모리 누수와 메모리 오버플로는 무엇을 의미하며, 차이점은 무엇인가요?
메모리 누수와 메모리 오버플로의 개념과 차이점. 자세한 내용은 다음과 같습니다.
1. 개념
메모리 오버플로(out of memory): 프로그램이 메모리를 신청할 때 사용할 수 있는 메모리 공간이 부족함을 의미합니다. 예를 들어, 정수를 신청했지만 long에만 저장할 수 있는 숫자를 저장하면 메모리 오버플로가 발생합니다.
메모리 누수: 프로그램이 메모리를 신청한 후에는 신청한 메모리 공간을 해제할 수 없음을 의미합니다. 메모리 누수로 인한 피해는 무시할 수 있지만 메모리 누수 누적으로 인한 결과는 다음과 같습니다. 조만간 아무리 많은 메모리를 차지하더라도 마찬가지입니다.
2. 차이점
메모리 오버플로는 프로그램이 메모리를 적용할 때 사용할 메모리 공간이 충분하지 않아 시스템이 더 이상 필요한 공간을 할당할 수 없음을 의미합니다. ; 메모리 누수 이는 프로그램이 메모리를 적용한 후 할당된 메모리 공간을 해제할 수 없음을 의미합니다. 메모리 누수로 인한 피해는 무시할 수 있지만 여러 번 메모리 누수가 발생하면 메모리 오버플로가 발생합니다.
메모리 오버플로는 할당을 요청한 메모리가 시스템이 제공할 수 있는 메모리를 초과하여 시스템이 요구 사항을 충족할 수 없어 오버플로가 발생하는 것을 의미합니다.
메모리 누수 분류
1. 빈번한 메모리 누수. 메모리 누수가 있는 코드는 여러 번 실행되므로 실행될 때마다 메모리 누수가 발생합니다.
2. 간헐적으로 메모리 누수가 발생합니다. 메모리 누수를 일으키는 코드는 특정 상황이나 작업에서만 발생합니다. 자주 발생하는 것과 산발적으로 발생하는 것은 상대적입니다. 특정 상황에서는 가끔씩 발생하는 일이 일반화될 수 있습니다. 따라서 테스트 환경과 테스트 방법은 메모리 누수를 감지하는 데 중요합니다.
3. 일회성 메모리 누수. 메모리 누수를 일으키는 코드는 한 번만 실행됩니다. 또는 알고리즘 결함으로 인해 항상 단 하나의 메모리 블록만 누수됩니다. 예를 들어, 클래스의 생성자에서 메모리가 할당되었지만 소멸자에서 메모리가 해제되지 않은 경우 메모리 누수는 한 번만 발생합니다.
4. 암시적 메모리 누수. 프로그램은 실행되는 동안 지속적으로 메모리를 할당하지만, 종료될 때까지 메모리를 해제하지 않습니다. 엄밀히 말하면 프로그램이 결국 요청된 모든 메모리를 해제하기 때문에 여기에는 메모리 누수가 없습니다. 그러나 며칠, 몇 주, 심지어 몇 달 동안 실행해야 하는 서버 프로그램의 경우 메모리를 제때 해제하지 못하면 결국 시스템 메모리가 모두 고갈될 수도 있습니다. 따라서 이러한 유형의 메모리 누수를 암시적 메모리 누수라고 부릅니다.