프로그래밍 언어/C#

[C#] 관리되는, 관리되지 않는 코드

ShovelingLife 2024. 5. 22. 14:29

관리되는 코드

.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#] 관리되는, 관리되지 않는 코드 — 반나무_뿌리 (tistory.com)