Windows 운영 체제에서 스택 메모리는 스레드 관련 저장소이며 호출 스택은 일련의 메서드의 논리 흐름입니다. 그래서 각 스레드는 자신의 스택 영역을가집니다. 나는 힙 memroy 영역이 어떻게 사용되는지 알고 싶다. 스레드별로 있습니까? 프로세스 별? 또는 .NET에서 AppDomian에 특정한가요? 또는 모든 사용자 응용 프로그램과 운영 체제간에 공유됩니까? 많은 감사합니다.힙 및 스택 메모리 사용에 대한 질문
답변
힙은 메모리 다이내믹 할당을 구현하는 가장 일반적인 방법입니다. 힙을 사용하는 일반적인 사용 시나리오에는 런타임까지 할당 할 메모리 양을 모르는 경우 또는 원하는 메모리가 너무 커서 스택에 할당 할 수없는 경우가 포함됩니다.
프로세스는 하나 이상의 힙을 보유 할 수 있습니다. 대부분의 프로세스는 힙을 넘어서 있습니다. 예를 들어 Windows에서 프로세스는 기본 프로세스 힙, CRT 힙을 가질 수 있으며 응용 프로그램은 API 힙 (API HeapCreate 사용)을 작성하기 위해 Windows API를 호출 할 수 있습니다.
프로세스가 생성되면 OS는 Default Process Heap이라는 새로운 힙을 생성합니다.이 힙은 실제로 대부분의 경우 거의 사용되지 않습니다. new/delete와 malloc/free를 호출 할 때 우리는 실제로 CRT 힙을 사용하고 있습니다.
Windows는 메모리 할당/할당 해제 및 힙의 관리가 효율적인지 확인하기 위해 일부 정교한 데이터 구조 및 알고리즘을 사용합니다. 그러나 일반적인 사실은 힙에 메모리를 할당하는 것이 스택에 비해 훨씬 느릴 수 있다는 것입니다.
자세한 내용은 C/C++을 통해 Jeffrey Richter의 훌륭한 책 Windows를 읽어보십시오. Windows에서 내부적으로 힙을 관리하는 방법에 대한 빠른 이해를 위해 Here을 읽을 수 있습니다.
일부 배경 : 일반적으로 heap은 프로그램 실행 중에 동적으로 할당되는 메모리를 저장하는 데 사용됩니다. 반대로 stack의 메모리는 일반적으로 단일 함수 호출의 수명 동안 만 사용됩니다. 즉 함수가 반환되면 메모리는 더 이상 사용되지 않습니다.
각 프로세스에는 고유 한 가상 메모리 세트가 있으므로 서로 다른 프로세스에는 고유 한 힙이 있습니다.
해당 프로세스 내의 스레드는 동일한 메모리 풀 (힙)을 공유하므로 한 스레드가 다른 스레드의 메모리를 "손상"시키지 않도록주의해야합니다.
여러 AppDomains는 단일 프로세스 내에서 실행할 수 있지만 각 프로세스에는 고유 한 데이터 세트가 있으므로 자체 힙이 있습니다.
"여러 AppDomains는 단일 프로세스 내에서 실행할 수 있지만 각 프로세스에는 고유 한 데이터 세트가 있으므로 자체 힙이 있습니다."
당신은 확실히 저스틴입니다. 다른 DLL을 별도의 응용 프로그램 도메인에로드하고 실행 한 다음 주기적으로 메모리 사용량을보고하는 간단한 명령 줄 응용 프로그램을 사용해 보았습니다.
별도의 DLL에있는 코드는 점차 메모리를 소비하도록 설계되었습니다.
결과적으로 개별 응용 프로그램 도메인에서 별도의 DLL로 실행되는 스레드의 메모리 부족 예외로 전체 로트가 중단 될 때까지 콘솔 응용 프로그램은 자체 응용 프로그램 도메인에 할당 된 양을보고합니다.
이 동작은 .NET 2를 실행하는 32 비트 XP SP3 컴퓨터에서 관찰되었으며 동일한 AppDomains가 동일한 프로세스 힙을 공유하고 있음을 나타냅니다.
다른 사람이 아니라 경험, 나는 그들이 질문에 중요하지 않기 때문에 내 대답의 실제 메모리 제한을 제거 유독 DLL을
- 1. 스레딩 힙 및 스택
- 2. 스택 및 힙 메모리 효과? 다음 코드에서
- 3. SelectedTab 사용에 대한 질문
- 4. JAVA 힙 스택 오류
- 5. 인터페이스 사용에 대한 질문
- 6. jschat gem 사용에 대한 질문
- 7. malloc() 및 힙 메모리
- 8. Android : CPU 사용에 대한 질문.
- 9. Windows 서버 2003의 메모리 사용에 대한 설명
- 10. system.net.mail 사용에 대한 질문 사항
- 11. Openssl에 대한 힙 메모리 사용량
- 12. 메모리 및 하위보기에 대한 질문
- 13. LuaJit 스택/힙 크기 증가
- 14. 스택 메모리 위치
- 15. CSS 스프라이트 및 메모리 사용에 관한 빠른 질문
- 16. 읽기 전용 메모리 및 힙 메모리
- 17. 힙 및 스택 공간의 초기화되지 않은 값
- 18. 스택 성장 및 힙 증가 방향
- 19. 백그라운드 인텔리전트 전송 서비스 사용에 대한 질문
- 20. C# .Net에서 힙 및 스택 내부의 오브젝트를 볼 수있는 방법
- 21. DLL 호출의 힙/스택 손상
- 22. C#에서 DLL 함수 사용에 대한 질문
- 23. libmemcached 사용에 관한 질문
- 24. 스택 기반 메모리 할당
- 25. 익명 목록 유형 사용에 대한 질문
- 26. WEF 서비스에서 MEF 사용에 대한 질문
- 27. 프로세스 스택/힙 메모리 할당을 설정하는 기능이 있습니까?
- 28. C++ 일부 스택 질문
- 29. 힙 조각화 및 창 메모리 관리자
- 30. RJS 및 link_to_remote 사용에 관한 질문
에서 내 응용 프로그램을 보온하는 방법을 알고 싶어요 있다면 ... –