티스토리 뷰

CSharp Just-In-Time Compilation Process



Step #1

  • CSharp 으로 소스코드를 작성하여 파일로 저장한다
    • ex) some-application.cs
Source Code


Step #2

  • CSharp 컴파일러로 컴파일을 수행한다
    • ex) prompt> csc some-application.cs
  • .dll 또는 .exe 파일이 생성된다
    • 컴파일되는 프로그램에 Main() 이 존재한다면 .exe 파일로 생성된다
    • ex) some-application.exe
  • 이 과정에서 생성된 파일은 기계어가 아니기 때문에 컴퓨터가 바로 실행할 수 없다
    • 이 파일을 다음의 호칭들로 부르곤 한다
    • MSIL → MicroSoft Intermediate Language
    • IL → Intermediate Language
    • CIL → Common Intermediate Language
  • 생성된 파일에는 IL 코드가 작성되어있다
    • IL 코드는 다시 한 번 컴파일을 거쳐야 비로소 기계어로 번역된다
CSharp Compiler
Source Code
IL Code


※ csc 는 CSharp 컴파일러 실행파일을 의미한다 ( CSharp Compiler 의 약어 )
일반적으로 C:\Windows\Microsoft.NET\Framework\[version]\csc.exe 위치에 존재한다
ex) C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe


Step #3

  • JIT 컴파일러로 컴파일을 수행한다
    • 이 컴파일은 Step #2 에서 생성된 파일을 실행할 때 수행된다
    • ex) prompt> some-application.exe
  • CLR 이 이 과정을 담당한다
    • CLR 이 JIT 컴파일러로 IL 코드를 컴파일한다
  • 이 과정을 통해 IL 코드들이 비로소 기계어로 번역된다
    • 이렇게 생성된 기계어를 다음의 호칭들로 부르곤 한다
    • Native Code
    • Machine Code
  • 생성된 기계어는 시스템에 의해 바로 실행될 수 있다
CSharp Compiler
JIT Compiler
Source Code
IL Code
Native Code


※ CLR 은 IL 코드의 실행을 담당하는 가상머신이다 ( Common Language Runtime 의 약어 )
Java 에서의 JVM 과 유사한 역할을 수행한다
프로그램 실행뿐만 아니라 프로그램의 메모리 및 스레드 관리 등을 수행하기도 한다


※ JIT 컴파일과 AOT 컴파일
JIT 컴파일은 실행도중 컴파일 과정을 거치는 방식을 말하며, AOT 컴파일은 그러한 과정이 없는 방식을 말한다
그렇기 때문에 AOT 컴파일이 일반적으로 성능면에서 우위를 가진다

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함