전단부
중단부
💡 최적화가 중요한 이유는 한번 컴파일 되고 나면 변경이 불가능하기 때문에 최적화를 수행함으로써 컴파일 시간이 길어지더라도 프로그램 수행속도를 향상시켜 전체 시스템 성능의 효율을 지속적으로 높여주기 위함이다.
SSA(Static Single Assignment) 구조로 변환
💡 비종속적인 최적화 : 서로 다른 CPU 아키텍쳐에 구애받지 않고 공통적으로 수행할 수 있는 최적화를 말한다.
아키텍쳐 비종속적인 최적화를 수행한다.
💡 RTL : 고급 언어와 어셈블리 언어의 중간 형태
후단부
RTS로 아키텍처 최적화 수행 - 더 효율적인 명령어로 대체해서 성능 높이기 위함
컴파일이 끝난 어셈블리 코드는 어셈블러에 의해 기계어로 어셈블된다.
어셈블러에 의해 생성되는 목적코드(source.o) 파일은 어셈블된 프로그램의 명령어와 데이터가 들어있는 ELF 바이너리 포멧 구조를 갖는다.
다음 단계인 링킹에서 링커가 여러개의 바이너리 파일을 하나의 실행 파일로 묶기 위해서 각 바이너리 정보를 효과적으로 파악하기 위해서 일정한 규칙을 갖게 형식화 해놓는다.
링커는 오브젝트 파일들과 프로그램에서 사용된 표준 C 라이브러리, 사용자 라이브러리들을 링크한다.
링킹 과정이 끝나면 실행 가능한 실행파일이 만들어지게 된다.