728x90
[관리되는 코드]
.NET CIL로 작성하고 컴파일 하는 .NET상의 코드 -> GC 메모리 관리가 된다.
[관리되지 않는 코드]
기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 -> GC 메모리 관리가 안 된다.
[IntPtr - 인터포인터] - 관리되지 않는 메모리 블록에 대한 포인터
정수형 포인터를 의미하는 값 형식의 타입
포인터는 메모리 주소값을 보관하는 곳
IntPtr타입은 메모리 주소를 가리키는 것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다.
핸들은 윈도우OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은예다.
파일처리, OS에서 제공되는 것 처리를 할 때 사용된다.
[Marshal Class - 마샬]
관리되지 않는 메모리 블록 <-> 관리되는 데이터 블록
메모리를 할당, 메모리 블록을 복사하는 클래스
Win32 응용 프로그램과 .NET 응용 프로그램을 연결시켜준다.
[Marshal.AllocHGlobal()]
int32, IntPtr가능
지정된 바이트 수 or 포인터를 사용하여, 프로세스의 관리되지 않는 메모리에서 메모리를 할당합니다.
[Marshal.FreeHGlobal(IntPtr)]
프로세스의 관리되지 않는 메모리에서 이전에 할당한 메모리를 해제합니다.
728x90
'C#' 카테고리의 다른 글
어셈블리 정보를 이용한 버전 관리, 자동 증가 (0) | 2023.01.17 |
---|---|
Marshal.PtrToStructur (Returning pointers from unmanaged to managed code) (0) | 2023.01.17 |
Closure, SOH(Small Object Heap), LOH(Large Object Heap) 오류 발생 원인과 해결방안 (0) | 2023.01.12 |
Find vs FirstOrDefault vs Where + FirstOrDefault vs for loop 속도 비교 (0) | 2023.01.12 |
FirstOrDefault vs Where.FirstOrDefault (0) | 2023.01.12 |