C#

C# CLR

KJaebee 2022. 4. 25. 22:52

Common Language Runtime

C#을 프로그램으로 만들기 전 중간 과정

C#의 C/C++과의 차별점

CLR 과정을 거처 다른 언어를 사용할 수 있게 지원

이때 서로 다른 언어들이 만나는 지점을 IL이라는 중간 언어이며 이 언어로 쓰여진 코드를

CLR이 다시 자신이 실행한 플랫폼에 맞춰서 컴파일 함.

 

순서

C# 컴파일 > IL생성 > CLR > 실행파일

 

*IL 생성후 CLR이 읽는 작업을 JIT(Just in Time) 컴파일이라고 함.

JIT컴파일이란 실행에 필요한 코드를 실행 살때마다 실시간으로 컴파일해서 실행.

 

순서를 다시 정리 하면

C# 컴파일 > JIT 컴파일 > 실행파일

즉, 컴파일을 2번하는 것

컴파일을 2번 함으로써 기계에 보다 더 최적화 됨으로써 최고의 성능을 내는 방식의 컴파일.

 

그 외의 기능

프로그램의 오류가 발생했을때 이를 처리하도록 도와주는 기능,

언어간의 상속 지원,

COM과의 상호 운영성 지원,

자동 메모리 관리 등의 기능

 

자동 메모리 관리 기능 = GC(Garbage Colletion) 가비지 컬렉션

프로그램에서 더 이상 사용하지 않는 메모리를 쓰레기로 간주하고 수거하는 기능

C/C++은 메모리를 동적으로 할당해주고 사용하지 않으면 직접 할당을 해제 해서 쓸모없는 메모리를 직접 수거했지만

C#은 GC가 사용하지 않는 메모리를 자동으로 수거하여 해제함.

 

유니티에서 오브젝트가 제거 되면 바로 해제 되는게 아니라 GC가 가지고 있다가 일정 주기에 일괄적으로 삭제함.

이때, GC가 많은 량의 데이터를 삭제 시키면 순간적으로 프레임이 끊길 수 있다.

그럼 게임에 안 좋은 영향이 생김. 이를 해결하기 위해 오브젝트 풀링 기능을 사용함.

(간단히 설명하면 오브젝트를 제거하지 않고 비활성화 시켜 필요할때 만 활성화해 꺼내 쓰는 방식)

'C#' 카테고리의 다른 글

C# Nullable, Var  (0) 2022.04.26
C# 개발 환경  (0) 2022.04.26
C# 스택, 힙 영역  (0) 2022.04.25
C# 자료형  (0) 2022.04.25
C#과 프로그래밍  (0) 2022.04.25