[C#] 관리되는, 관리되지 않는 코드C#/C#정리2021. 9. 28. 20:17
Table of Contents
관리되는 코드, 관리되지 않는 코드
C#을 처음 공부할때 나에게 너무 어려운 에러 문구였다.
쉽게 말하면
관리되는 코드
.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#정리' 카테고리의 다른 글
[C#] GC, 가비지 컬렉터, 메모리 관리, using (0) | 2021.09.28 |
---|---|
[C#] Thread 쓰레드 동기화 (0) | 2021.09.28 |
[C#] Thread 쓰레드 (0) | 2021.09.28 |
[C#] 다양한 타입(object, dynamic, var) (0) | 2021.09.28 |
[C#] 메소드 오버로드 (0) | 2021.09.20 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!