메모리 누출 로 인해 결함이있는 메모리에 할당하는 컴퓨터 프로그램에 자원의 오정렬된다. 사용하지 않는 RAM 위치가 릴리스되지 않은 상태로있을 때 발생합니다. 메모리 누수를 필요 이상으로 많은 RAM을 사용하는 프로그램을 나타내는 공간 누수와 혼동해서는 안됩니다. Windows 10/8/7 시스템에서 메모리 누수는 사용하지 않는데도 메모리에 액세스 할 수 없을 때 발생했다고합니다.
Windows 10의 메모리 누수
시작하기 전에 메모리 누수가 디버깅 할 소프트웨어 문제라는 것을 알아야합니다. 예를 들어 Java, JavaScript, C / C ++, Windows 등에서. RAM이나 하드 디스크를 물리적으로 교체 할 필요가 없습니다.
왜 나쁜가요
시스템의 결함 인 버그이기 때문에 메모리 누수가 나쁘다는 것은 명백합니다. 그러나 그것이 시스템에 정확히 어떻게 영향을 미치는지 알아 봅시다 :
- 사용하지 않을 때에도 메모리가 해제되지 않으므로 메모리가 고갈됩니다.
- 메모리가 고갈되면 소프트웨어가 노화됩니다.
- 사용 가능한 메모리가 감소하면 응답 시간이 증가하고 시스템 성능이 저하됩니다.
- 확인되지 않은 메모리 누수는 결국 응용 프로그램의 충돌로 이어질 수 있습니다.
메모리 누수를 확인하려면 프로그래머가 프로그램의 소스 코드에 액세스 할 수 있어야합니다.
누수 찾기
문제를 해결하려면 먼저 문제를 식별해야합니다. 메모리 누수를 찾는 기본 단계는 다음과 같습니다.
- 긍정 : 누출이 발생했는지를 결정.
- 커널 모드 메모리 누수 찾기 : 커널 모드 드라이버 구성 요소로 인한 누수 찾기.
- 사용자 모드 메모리 누수 찾기 : 사용자 모드 드라이버 또는 앱으로 인한 누수를 찾습니다.
메모리 할당
응용 프로그램이 RAM을 할당하는 여러 모드가 있습니다. 사용 후 공간이 확보되지 않으면 할당 모드에 관계없이 메모리 누수가 발생합니다. 몇 가지 일반적인 할당 패턴은 다음과 같습니다.
- 힙 메모리 할당을위한 HealAlloc 함수. C / C ++ 런타임에 해당하는 것은 malloc 및 new입니다.
- OS에서 직접 할당을위한 VirtualAlloc 기능.
- 앱의 커널 메모리를 보유하는 Kernel32 API입니다. 예 : CreateFile, CreateThread.
- User32 API 및 Gdi32 API.
메모리 누수 방지
우리 모두는 예방이 치료보다 낫다는 것을 알고 있으므로 메모리 누수를 방지하는 몇 가지 방법이 있습니다.
습관 모니터링
개별 프로그램 및 응용 프로그램에서 비정상적인 RAM 사용량을 주시해야합니다. CTRL + SHIFT + ESC 를 눌러 Windows 작업 관리자로 이동하고 Handles, User Objects, GDI Objects 등과 같은 열을 추가 할 수 있습니다.
이렇게하면 리소스 사용량을 쉽게 모니터링 할 수 있습니다.
메모리 누수 진단을위한 Microsoft 도구
다양한 도구가 다양한 할당 모드에 대한 메모리 누수를 진단합니다.
- Application Verifier는 힙 누수를 진단합니다.
- UMDH (Windows 디버깅 도구의 구성 요소)는 힙 메모리 할당을 모니터링하여 개별 프로세스의 누수를 진단합니다.
- RAM 사용량에 대한 철저한 분석을위한 Trace Capture.
- Xperf도 힙 할당 패턴을 추적합니다.
- CRT 디버그 힙은 힙 할당을 추적 할뿐만 아니라 코딩 방식을 통해 누수를 최소화 할 수 있습니다.
- JavaScript Memory Leak Detector는 코드의 메모리 누수를 디버깅합니다.
사용 팁
- Win32 리소스 및 힙 할당을 위해 커널 HANDLE 및 기타 스마트 포인터를 사용합니다.
- ATL 라이브러리에서 커널 할당을위한 자동 리소스 관리를위한 클래스를 가져옵니다. C ++ 표준에는 힙 할당을위한 auto_ptr 이 있습니다.
- _com_ptr_t 또는 _bstr_t 또는 _variant_t 의 도움으로 "스마트 포인터"내에 COM 인터페이스 포인터를 캡슐화 합니다.
- 비정상적인 메모리 사용량에 대해 .NET 코드를 모니터링합니다.
- 함수가 끝날 때 대부분의 블록에있는 변수에서 할당을 해제 할 수 있도록 함수에 대한 다중 종료 경로를 피하십시오.
- _finally 블록에서 모든 할당을 해제 한 후에 만 기본 예외를 사용하십시오. C ++ 예외를 사용하기 위해 모든 힙 및 핸들 할당을 스마트 포인터로 래핑합니다.
- PROPVARIANT 개체를 다시 초기화하거나 삭제하기 전에 항상 PropVariantClear 함수를 호출하십시오 .
Windows에서 메모리 누수 문제 해결
메모리 누수를 방지하는 다양한 방법과 마찬가지로 메모리 누수를 막는 다양한 방법이 있습니다. 그러나 시작하기 전에 먼저 시스템 복원 지점을 만들어야합니다.
1] 프로세스를 닫고 다시 시작하십시오.
불필요한 프로세스가 너무 많은 RAM을 차지하고있는 경우 작업 관리자에서 프로세스를 종료 할 수 있습니다. 여유 공간을 다른 프로세스에서 사용할 수 있도록 장치를 다시 시작해야합니다. 다시 시작하지 않으면 메모리 누수 문제가 해결되지 않습니다. PC 속도를 늦추는 버그가있는 특정 프로세스 중 하나는 런타임 브로커입니다. 그것만으로 작동하는지 시도하십시오.
2] 메모리 진단 도구
Windows 용 내장 메모리 진단 도구에 액세스하려면 :
- 모든 중요한 작업을 저장하십시오.
- 보도 승 + R은 오픈하는 실행 창을여십시오.
- 명령 입력 mdsched.exe 에서 실행 창을여십시오.
- PC를 다시 시작하십시오.
- 다시 시작한 후 기본 스캔을 수행하거나 ' Test mix '또는 ' Pass count ' 와 같은 ' Advanced '옵션으로 이동합니다 .
- 보도 F10는 테스트를 시작합니다.
이는 여전히 임시 수정입니다.
3] 드라이버 업데이트 확인
오래된 드라이버로 인해 메모리 누수가 발생합니다. 모든 드라이버를 최신 상태로 유지 :
- Win + R을 누르고 실행 창을 엽니 다 . 유형 devmgmt.msc를 입력하고 Enter 키를 누릅니다. 그것은 당신을 데려 갈 것이다 장치 관리자 .
- 오래된 드라이버를 확인하고 모두 업데이트하십시오.
- 놓친 업데이트는 Windows 업데이트에서 확인하세요.
이것은 간단했습니다.
4] 성능 최적화
성능을 위해 Windows를 조정하면 메모리 누수를 막기 위해 프로세서 예약 및 메모리 사용을 포함한 모든 것을 관리합니다. 다음과 같이하세요:
- ' 이 PC '를 마우스 오른쪽 버튼으로 클릭 하고 왼쪽 창 에서 ' 고급 '설정을 선택 합니다.
- ' 고급 '탭에서 ' 성능 '으로 이동 한 다음 ' 설정 '으로 이동합니다.
- ' 최적의 성능으로 조정 '을 선택하고 확인을 클릭 합니다.
- 다시 시작하고 문제가 해결되었는지 확인하십시오.
이 간단한 해결책이 작동하지 않으면 다음 해결책을 시도하십시오.
5] 시작시 실행되는 프로그램 비활성화
성가신 프로그램을 비활성화하는 것이 메모리 누수 문제를 제거하는 유일한 방법입니다. 작업 관리자로 이동하여 문제 해결 프로그램을 비활성화하십시오. 어떤 프로그램이 문제를 일으키는 지 모르는 경우 다음과 같이하십시오.
- ' 작업 관리자 '로 이동합니다 .
- ' 시작 '으로 이동합니다 .
- 기본적으로 실행할 필요가없는 시작 프로그램을 비활성화합니다.
6] 하드 드라이브 조각 모음
Windows 10이이 작업을 자동으로 수행하지만 성능을 최적화하려면 때때로 하드 드라이브 조각 모음을 수행해야 할 수 있습니다.
- ' 이 PC '또는 ' 내 컴퓨터 '로 이동합니다.
- 시스템 하드 드라이브 (일반적으로 C : 드라이브)를 마우스 오른쪽 버튼으로 클릭합니다.
- ' 속성 '아래의 ' 도구 '로 이동하여 ' 최적화 '를 선택하십시오 .
- 조각 모음 할 드라이브를 선택하고 ' 분석 '을 선택 합니다.
새로운 조각화 후 컴퓨터를 다시 시작하십시오.
7] 종료시 ClearPage 파일
지금은 복잡해 지지만 걱정하지 마십시오. 종료 할 때마다 페이지 파일을 지우는 방법은 다음과 같습니다.
- 검색에 regedit 를 입력 하여 레지스트리 편집기를 시작합니다.
- 다음 경로를 입력하십시오.
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager 메모리 관리
- ClearPageFileAtShutDown 의 값 을 '1'로 변경하십시오 .
- 변경 사항을 저장하고 장치를 다시 시작하십시오.
이것은 그것을해야합니다. 종료 프로세스에는 시간이 조금 더 걸립니다.
9] Superfetch 비활성화
이 Windows 서비스는 부팅 시간을 최소화하여 성능을 최적화합니다. Windows에서 RAM 사용량을 관리 할 수 있습니다. Superfetch를 비활성화 한 후의 생활은 편리하지 않지만 필요한 경우 수행합니다. 적어도 문제를 분리하기 위해 이것을 단독으로 시도하십시오.
- services.msc를 검색 하고 서비스 관리자로 이동합니다.
- ' Superfetch '를 찾아 마우스 오른쪽 버튼으로 클릭하여 ' 속성 ' 으로 이동합니다 .
- ' 중지 '를 선택하십시오 .
- 또한 드롭 다운 메뉴에서 서비스를 ' 비활성화 '합니다.
- PC를 다시 시작하고 성능이 향상되었는지 확인하십시오.
이것이 작동하지 않으면 Superfetch를 활성화하십시오.
10] 악성 코드 확인
타사 바이러스 백신 소프트웨어 또는 Windows 10의 사내 Windows Defender를 사용하여 맬웨어를 검사하고 제거합니다. 바이러스 백신이 OS를 지원하도록 업데이트되었는지 확인하여 메모리 누수의 원인이되지 않도록합니다.
메모리 누수를 찾거나 방지하는 데 필요한 모든 솔루션이 바로 여기에 있습니다. MSDN 및 Microsoft에서 메모리 누수에 대한 자세한 내용을 읽을 수 있습니다.

Original text
