메모리 넘 침 과 메모리 누 출 에 대한 상세 한 설명 및 차이
메모리 넘 침 out of memory 는 프로그램 이 메모 리 를 신청 할 때 사용 할 수 있 는 충분 한 메모리 공간 이 없고 out of memory 가 나타 나 는 것 을 말한다.예 를 들 어 integer 를 신 청 했 지만 롱 을 저장 해 야 저장 할 수 있 는 수 를 주 었 습 니 다.그것 은 바로 메모리 가 넘 치 는 것 입 니 다.
메모리 유출 memory leak 은 프로그램 이 메모 리 를 신청 한 후에 이미 신청 한 메모리 공간 을 방출 할 수 없 으 며,한 번 의 메모리 유출 위 해 는 무시 할 수 있 으 나,메모리 유출 축적 결 과 는 매우 심각 하 며,아무리 많은 메모리 가 있어 도 조만간 빛 을 볼 것 이다.
memory leak 는 결국 out of memory 를 초래 할 수 있 습 니 다!
메모리 가 넘 치 는 것 은 시스템 이 줄 수 있 는 것 을 초과 한 것 입 니 다.시스템 이 수 요 를 만족 시 키 지 못 해서 넘 치 는 것 입 니 다.
메모리 누 출 이란 시스템 에 메모리 할당 을 신청 하여 사용(new)하 는 것 을 말 합 니 다.그러나 사용 이 끝 난 후에 도 돌려 주지 않 습 니 다(delete).결국 당신 이 신청 한 메모리 에 더 이상 접근 할 수 없습니다(주 소 를 잃 어 버 렸 을 수도 있 습 니 다).시스템 도 필요 한 프로그램 에 다시 할당 할 수 없습니다.한 접시 에 여러 가지 방법 을 다 써 서 네 개의 과일 만 담 을 수 있 었 는데,너 는 다섯 개 를 담 았 는데,결국 바닥 에 떨어져 서 먹 을 수 없 게 되 었 다.이게 넘 치 는 거 야!예 를 들 어 스 택 이 꽉 찼 을 때 다시 스 택 에 들 어가 면 반드시 공간 이 넘 치고 넘 치 며 스 택 이 비어 있 을 때 다시 스 택 을 반환 하 는 것 도 공간 이 넘 치 는 것 을 하 넘 치 는 것 이 라 고 합 니 다.분 배 된 메모리 가 부족 해서 데이터 항목 의 순 서 를 내 려 놓 는 것 을 메모리 넘 침 이 라 고 합 니 다.
발생 하 는 방식 으로 분류 하면 메모리 누 출 은 4 가지 로 나 눌 수 있다.
1.상 발성 메모리 누 출.메모리 누 출 이 발생 하 는 코드 는 여러 차례 실 행 될 수 있 으 며,실 행 될 때마다 메모리 가 누 출 될 수 있다.
2.우발 적 인 메모리 유출.메모리 누 출 이 발생 하 는 코드 는 특정 환경 이나 작업 과정 에서 만 발생 합 니 다.상 발성 과 우발 성 은 상대적이다.특정한 환경 에 대해 우발 적 인 것 은 아마도 상 발성 으로 변 할 것 이다.따라서 테스트 환경 과 테스트 방법 은 메모리 누 출 을 검사 하 는 데 매우 중요 하 다.
3.일회 성 메모리 유출.메모리 누 출 이 발생 하 는 코드 는 한 번 만 실행 되 거나 알고리즘 상의 결함 으로 인해 한 조각 만 유출 될 수 있 습 니 다.예 를 들 어 클래스 의 구조 함수 에서 메모 리 를 분배 하고 분석 함수 에서 이 메모 리 를 방출 하지 않 았 기 때문에 메모리 누 출 은 한 번 만 발생 할 수 있다.
4.암시 적 메모리 유출.프로그램 은 실행 중 에 끊임없이 메모 리 를 분배 하지만 끝 날 때 까지 메모 리 를 방출 합 니 다.엄 밀 히 말 하면 여기에서 메모리 누 출 이 발생 하지 않 았 다.왜냐하면 최종 프로그램 이 모든 신청 한 메모 리 를 방출 했 기 때문이다.그러나 서버 프로그램 에 대해 서 는 며칠,몇 주,심지어 몇 달 동안 실행 해 야 하 며,메모 리 를 제때에 방출 하지 않 아 도 최종 적 으로 시스템 의 모든 메모 리 를 다 소모 할 수 있다.그래서 우 리 는 이런 메모리 누 출 을 암시 적 메모리 누 출 이 라 고 부른다.
사용자 가 프로그램 을 사용 하 는 측면 에서 볼 때 메모리 누 출 자체 에 해 를 끼 치지 않 고 일반 사용자 로 서 메모리 누 출 의 존 재 를 전혀 느끼 지 못 한다.정말 해 가 되 는 것 은 메모리 누 출 의 축적 이다.이것 은 결국 시스템 의 모든 메모 리 를 소모 하 게 될 것 이다.이런 측면 에서 볼 때,일회 성 메모리 누 출 은 아무런 해 가 없다.왜냐하면 그것 은 쌓 이지 않 기 때문에,스텔스 메모리 누 출 의 위해 성 은 매우 크다.왜냐하면 상 발성 과 우발 성 메모리 누 출 보다 검출 되 기 어렵 기 때문이다
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!