bdfgdfg

[C#] CLR(Common Language Runtime) 본문

게임프로그래밍/C#

[C#] CLR(Common Language Runtime)

marmelo12 2022. 4. 17. 14:51
반응형

C#으로 만든 프로그램은 CLR 위에서 실행된다.

CLR은 .NET 프레임우크와 함께 OS위에 설치된다.

 -> 자바의 JVM과 비슷한 역할. C#,JAVA같은 언어에서 컴파일 타임에 코드를 중간 언어(IL)로 바꾸고, 실행 시간에 CLR,JVM과 같은 가상머신을 통해 해당 중간 언어들을 CPU가 이해할 수 있는 바이너리 코드로 변환한다.

출처 - https://aroundck.tistory.com/662

C# 컴파일러는 C# 소스코드를 IL(Intermediate Language)라는 중간언어로 작성된 실행 파일을 만들어 낸다.

 -> 물론 해당 언어는 CPU가 이해할 수 있는 코드는 아니다.

사용자가 해당 실행 파일을 실행하면 CLR이 중간 코드를 읽어 들여 다시 CPU가 이해할 수 있는 바이너리 코드로 컴파일 한 후 실행시킨다. 이것을 JIT(Just In Time)컴파일이라고 부른다.

 -> JIT 컴파일이란, 실행에 필요한 코드를 실행할 때마다 실시간으로 컴파일해서 실행한다는 뜻.

 

그렇다면 C++처럼. 한번의 빌드과정으로 바로 바이너리로 변환된 실행파일을 만들어내는게 아니라, C#은 왜 두번의 컴파일 과정을 거칠까.

해당 이유는 C#이 동작하는 환경이자 엔진인 CLR은 C#뿐만 아니라 다른 언어도 지원하도록 설계되어있다.

서로 다른 언어들이 만나기 위한 지점이 바로 IL이라는 중간 언어.

출처 - https://medium.com/@kunaltandon.kt/c-clr-il-jit-compilation-code-access-security-explained-269124121f5

해당 언어로 쓰여진 코드를 CLR이 다시 자신이 설치되어 있는 플랫폼에 최적화시켜 컴파일한 후 실행한다.

 

위와 같은 방식의 장점은 플랫폼에 최적화된 코드를 만들어낸다는 의미이며, 단점은 실행시에 이루어지는 컴파일 비용의 부담이 크다.

 

그 외에도 CLR은 예외처리,언어간 상속 지원, COM과의 상호 운영성 지원, 그리고 가비지 컬렉션(메모리 관리)등의 기능또한 제공을 한다.

 

 

반응형

'게임프로그래밍 > C#' 카테고리의 다른 글

[C#] 부모 자식 사이의 형 변환 (is,as)  (0) 2022.04.18
[C#] ref,out 키워드  (0) 2022.04.18
[C#] 문자열 다루기  (0) 2022.04.18
[C#] C#의 데이터 형식  (0) 2022.04.17
Reflection / Attribute  (0) 2021.08.06
Comments