목차
1장. CLR의 실행 모델
어셈블리 코드 실행하기
- 어셈블리는 메타데이터와 IL을 같이 포함
- IL
- CPU에 독립적인 기계어 코드로 Microsoft가 외부의 몇몇 상용 및 학술용 언어/컴파일러 제작자들과 상의하에 만든 것이다.
- 대다수의 CPU 기계어보다 더욱 고차원의 언어다.
- 객체의 타입을 다루며, 객체를 생성하고 초기화하거나, 객체의 가상 메서드를 호출하거나, 배열 요소들을 직접 관리하는 명령어들(Instructions)을 가지고 있다.
- 예외처리를 위한 Throw와 Catch에 대한 명령어도 가지고 있다.
- 객체 지향형 기계 언어(Object Oriented Machine Language)로 볼 수도 있다.
- 마이크로소프트는 ILASM.EXE라는 IL 어셈벌러를 제공한다.
- 마이크로소프트는 또한 ILDASM.EXE라는 IL 역어셈블러(Disassembler)도 제공한다.
- 거의 모든 고급 언어들은 CLR이 제공하는 기능 중의 일부만을 포장해서 제공한다.
- IL 어셈블리 언어는 개발자들에게 CLR의 모든 기능들을 다룰 수 있게 해준다.
- 성능 저하(Performance Hit)는 메서드가 최초로 호출될 때에만 발생한다. 그 이후 발생하는 모든 후속 메서드 호출들은 네이티브 코드로서 빠른 속도로 실행되는데, 네이티브 코드에 대해서는 다시 내용을 검사하거나 컴파일해야 할 필요가 없기 떄문이다.
- JIT 컴파일러는 네이티브 CPU 명령어를 동적 메모리상에 저장한다. 이 내용은 컴파일된 코드가 응용프로그램이 종료되는 시점에 자동으로 소거된다.
- PDB 파일은 디버거가 지역 변수를 찾을 수 있게 해주거나, 소스 코드와 IL 사이를 연결하는 데 도움을 준다.