관리되는 코드
.NET CIL로 작성하고 컴파일 하는 .NET상의 코드 -GC 메모리 관리가 된다
관리되지 않는 코드
기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 -GC 메모리 관리가 안된다.
ex) 윈도우 시스템 자원
IntPtr - 인터포인터
관리되지 않는 메모리 블록에 대한 포인터
정수형 포인터를 의미하는 값 형식의 타입
포인터는 메모리 주소값을 보관하는 곳
IntPtr 타입은 메모리 주소를 가리키는 것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다.
핸들은 윈도우 OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은 예다.
파일처리, OS에서 제공되는것 처리를 할 때 사용된다.
ex) 이미지 처리에서도 쓰인다.
Marshal Class - 마샬
관리되지 않는 메모리 블록 <-> 관리되는 데이터 블록
메모리를 할당, 메모리 블록을 복사하는 클래스
Win32 응용 프로그램과 .Net 응용프로그램을 연결시켜준다.
Marshal.AllocHGlobal()
int32, IntPtr 가능
지정된 바이트 수 or 포인터를 사용하여, 프로세스의 관리되지 않는 메모리에서 메모리를 할당한다.
Marshal.FreeHGlobal(IntPtr)
프로세스의 관리되지 않는 메모리에서 이전에 할당한 메모리를 해제한다.
'프로그래밍 언어 > C#' 카테고리의 다른 글
[C#] 포인터 관련 unsafe fixed 키워드 (0) | 2024.05.23 |
---|---|
[C#] Marshal (0) | 2024.05.22 |
[C#] DLL 파일 생성, 참조하는 법 (0) | 2024.05.22 |
[C#] Newtonsoft.Json 사용방법 (0) | 2024.03.05 |
[C#] Visual Studio Nuget 설치 (0) | 2024.03.05 |