C# 프로그램의 컴파일 및 실행 순서 요약(C# 소스코드, 어셈블리, JIT, 기타)

C# 프로그램의 컴파일 및 실행 순서 요약(C# 소스코드, 어셈블리, JIT, 기타)

C# 소스코드의 컴파일 결과 생성한 어셈블리를 메모리에 로드하고 기계어 코드로 변환하여 프로그램을 실행하는 과정

 

1 - 개발자가 IDE(Visual Studio) 또는 텍스트 편집기에서  닷넷 코드(C#)로 프로그램을 작성합니다.

 

2 - C# 컴파일러(csc.exe)가 프로그램을 컴파일합니다(어셈블리 파일 생성)

csc.exe는 C# 컴파일러로 .NET Framework에서 제공하는 기능 중 하나입니다. .NET Framework를 설치하면 csc.exe도 함께 설치됩니다. 이 컴파일러를 사용하여 C# 소스 코드를 컴파일하고 .NET Framework에서 실행 가능한 어셈블리 파일을 생성합니다. VB.NET으로 작성한 프로그램은 비주얼베이직닷넷 컴파일러(vbc.exe)가 컴파일합니다(언어에 따라서 컴파일러가 존재)

3 - 컴파일의 결과물로 어셈블리(exe, dll)가 생성됩니다.

컴파일의 결과물로 생성되는 것은 기계어가 아닌 중간 단계의 바이트 코드(MSIL, microsoft intermediate language)입니다. 이 코드는 특정 플랫폼에서 실행될 수 있는 형태로 만들어진 코드이며 일반적으로 ".exe" 또는 ".dll" 파일 형태로 저장됩니다.

 

4 - 어셈블리 로드 및 JIT 컴파일

.NET Framework의 CLR이 어셈블리(MSIL 코드)를 메모리에 로드합니다. 메모리에 로드한 어셈블리(MSIL 코드)는 JIT 컴파일러(Just-In-Time Compiler)에 의해서 해당 플랫폼에 맞는 기계어 코드(원시코드, native code)로 컴파일 됩니다.

 

5 - 결과물 실행
컴파일된 원시코드(JIT 컴파일 결과물)는 메모리 캐시에 저장되고 실행됩니다. 이 코드 캐시를 통해 중복된 코드 컴파일을 피하고 성능을 최적화할 수 있습니다.

 

6 - Garbage Collection

CLR은 실행 중 생성된 객체를 관리하고 메모리 누수를 방지하기 위해 가비지 수집(Garbage Collection)을 수행합니다. 

 

7 - 프로그램 종료

프로그램 실행이 종료될 때 CLR은 메모리에서 사용한 리소스를 해제하고 관련된 어셈블리와 실행 환경을 종료합니다.

 

 

 

댓글

Designed by JB FACTORY