.NET 컴파일 과정

김석·2023년 6월 5일
0

C#/.NET

목록 보기
2/2

1. CLR

  • Common Language Runtime
  • Java의 JVM와 같은 닷넷 환경의 가상 머신.
  • 닷넷 환경 언어(VB .NET, C#)로 개발된 IL(Intermediate Language, 중간 언어) 코드들은 닷넷 프레임워크가 설치된 어떠한 환경에서도 실행 가능함.
  • CIL(Common Intermidiaate Language, 공통 중간 언어) 코드는 닷넷 환경의 언어로 작성된 소스 코드를 컴파일했을 때 만들어지는 바이트 코드를 의미하며, 어셈블리 코드의 일종임.
  • 닷넷 환경의 언어로 개발할 때, 소스 코드를 컴파일하게 되면, 컴파일 타임에 해당 언어의 컴파일러에 의해 우선 바이트 코드인 CIL 코드를 생성함.
  • 그리고 CLR은 런타임에 JIT(Just-In-Time) 또는 AOT(Ahead-Of-Time) 컴파일 방식을 이용하여 CIL 코드를 OS가 이해할 수 있는 native 코드로 변환하게 됨.

2. JIT 컴파일

  • C/C++로 작성된 프로그램은 다른 언어에 비해 빠르다.
  • 정적인 native 코드(.exe, .dll)을 생성해 배포하기 때문.
  • 반면 Java, C#과 같은 언어들은 컴파일러가 생성한 IL 코드를 가지고 있다가 프로그램을 실행시키면 런타임에 가상머신을 통해 동적으로 native 코드를 생성하게 됨.
  • 이 때 가상머신에 의한 런타임 컴파일 방식을 JIT 컴파일이라고 함.
  • JIT 컴파일이란 런타임에 IL 코드를 native 코드로 바꾸는 컴파일 과정.
  • 프로그램이 처음 로드될 때 가상머신은 IL 코드를 실행 환경에 알맞은 native 코드로 컴파일함.
  • 이후 실행 시에는 JIT 과정 없이 해당 네이티브 코드를 실행.
  • C# 코드 반복 수행 시, 첫 수행이 아주 느리고, 다음 수행부터 비슷하게 빠른 현상이 생기는데, 이게 JIT 컴파일 때문임.
  • 하지만 JIT 컴파일 방식은 메모리를 많이 사용하고 속도도 떨어지는 단점이 존재.

3. AOT 컴파일

  • JIT 컴파일 방식의 느린 속도를 해결하기 위해 만들어진 컴파일 방식.
  • 컴파일 타임에, IL 코드를 실행 환경에 적합한 native 코드로 컴파일을 완료함.
  • CIL 코드를 C++ 컴파일러를 통해 닷넷 native 이진코드로 변환함.

출처

https://rito15.github.io/posts/cs-dotnet-compile/

profile
handsome

0개의 댓글