C# 프로그램의 컴파일 및 실행 순서 요약(C# 소스코드, 어셈블리, JIT, 기타)
- c#
- 2023. 4. 6.
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은 메모리에서 사용한 리소스를 해제하고 관련된 어셈블리와 실행 환경을 종료합니다.
'c#' 카테고리의 다른 글
C# 프로그래밍 - 메서드(method) (0) | 2023.06.14 |
---|---|
C# 프로그래밍 - 변수(Variable) (1) | 2023.06.13 |
c# - 기본 데이터 형식과 연산 출력 예제 (0) | 2023.01.20 |
c# - 조건문, 반복문 기본 예제(if, switch, while, for) (0) | 2023.01.20 |
c# - 콘솔에서 Hello World출력하기, Console.WriteLine과 Console.Write (0) | 2023.01.20 |