CLR에서 기본 힙의 메모리 관리를 이해하고 싶습니다. 나는 CLR이 힙을 관리하고 있다는 것을 알고있다. 예를 들어, 일부 C++ 라이브러리를 발전시키는 C++/CLI 바인딩 라이브러리를 사용하고 있습니다. 작업하는 동안 C++ 라이브러리는 객체를 할당 할 수 있습니다. 이러한 개체는 CLR의 원시 힙에 할당됩니까? 내가 알기 론 CLR은 CLR 실행 중에 생성되는 네이티브 및 관리 힙을 가지고 있습니다.CLR에서 기본 힙의 메모리 관리
1
A
답변
2
CLR에는 "기본 힙"이 없습니다. 코드에서 malloc()
또는 new
을 사용하면 C 런타임 할당자를 사용합니다. 네이티브 C 또는 C++ 프로그램에서 사용하는 것과 정확히 동일합니다. 2010 버전 이하 버전의 경우 2010에 대해 HeapCreate로 만든 자체 힙에서 할당하고 최대 프로세스 힙 (GetProcessHeap)에서 할당합니다.
네이티브 C 또는 C++ 프로그램에있는 것처럼 "관리"가 전혀 없으므로 free()
또는 delete
으로 전화해야합니다. 그렇게하지 않으면 메모리 누수가 발생하고 가비지 컬렉터가 전혀 도움이되지 않습니다.
+0
필자는 라이브러리의 C 런타임이 자체 힙을 만들 것이라고 생각하니? – LmTinyToon
읽은 내용은 정확하지만 단순화되었습니다. 네이티브 힙에 대한 읽기 : https://msdn.microsoft.com/en-gb/library/windows/desktop/aa366711(v=vs.85).aspx –
기본적으로 C++의'new'는'HeapAlloc'을 호출합니다 . C++/CLI의'gcnew'는 관리 힙에 할당합니다. 네이티브 힙은 어떤 식 으로든 CLR에 속하지 않습니다. –