C# 컴파일 및 실행 과정

선비Sunbei·2023년 1월 8일
0

C#

목록 보기
2/18
post-thumbnail

C# 컴파일 및 실행 과정

  1. *.cs 파일에 C#으로 코드를 작성한다.
  2. C# 컴파일러 csc.exe가 *.cs 파일을 컴파일을 한다.
  3. 컴파일러의 결과물로 .exe나 .dll이 나온다.
    확장자가 exe이지만 바로 실행 가능한 결과물이 아닌 CIL(Common Intermediate Language)로 중간언어이다.
  • CIL(Common Intermediate Language, 공통 중간 언어)
    마이크로소프트 공통 중간 언어로 바이트코드로 이루어져있다.
    해당 CIL은 자바와 마찬가지로 가상머신(닷넷)에 의해 실행된다.
    C# 외에도 visual basic 등을 컴파일하여 CIL로 만들 수 있다.
    이는 어느 운영체제에서도 실행하기 위한 자바의 철학과 같다.
  1. *.exe 파일을 실행
  2. 실행하기 위해서 CIL코드가 CLR 내부의 Class Loader에 의해서 CIL의 클래스들의 레이아웃 로드와 메타데이터 및 사용된 클래스 라이브러리 등을 로드하여 각종 과정을 거친 뒤 메모리에 로드
  • CLR(Common Language Runtime)
    실행환경 전반을 관리하는 핵심 엔진으로 자바의 JVM과 같은 마이크로소프트에서 제공하는 가상머신의 구성요소 중 하나이다. CLR은 운영체제가 이해할 수 있는 코드로 변환해주는 역할을 한다.
  1. 메모리에 올라간 CIL를 컴퓨터가 이해할 수 있는 코드로 변환해주는 역할을 해주는 것이 JIT 컴파일러이다. (CLR에 포함된다.)
  • JIT Compiler(Just-in-time complation)
    프로그램을 실제 실행하는 시점에 기계어로 변역하는 시점에 기계어로 번역하는 컴파일 기법이다.
    이 기법은 인터프리터 방식처럼 CIL을 읽으며 해당 기능에 대응하는 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매법 기계어 코드를 생성하는 것을 방지한다.
  1. JIT 컴파일러에 의해 컴파일 된 어셈블리어는 다음번 실행을 위해 메모리에 캐시에 올리며 실행한다.

JIT Compile, AOT Compile 그리고 Unity

  • AOT(ahead-of-time compile)
    JIT Compile이 런타임에 CIL을 기계어로 변경을 했다면 AOT는 런타임이 아닌 미리 CIL을 기계어로 변경하는 방식을 의미한다.

Unity는 JIT Compile 방식와 AOT Compile 방식을 모두 지원한다.

  1. Mono Framework(JIT Compile)을 통하여 CIL로 변환하여 플랫폼의 종속이지 않게 변환한다.
  2. IL2CPP(AOT Compile)을 통하여 CIL을 C++로 변환 후 기계어까지 생성한다.

0개의 댓글