컴파일 과정
- 컴파일 과정은 4가지 단계(전처리 과정 - 컴파일 과정 - 어셈블리 과정 - 링킹 과정)로 나누어 진다.
전처리(Pre-processing) 과정
- 주석 제거
- 헤더 파일 삽입
- 매크로 치환 및 적용
컴파일(Compilation) 과정
- 프론트엔드 : 언어 종속적인 부분을 처리
- 미들엔드 : 아키텍쳐 비종속적인 최적화를 수행
- 백엔드 : 아키텍쳐 종속적인 최적화를 수행
어셈블리(Assembly) 과정
- 어셈블리 과정은 어셈블러를 통해 어셈블리어 파일을 오브젝트 파일로 변환
- 오브젝트 파일 : 더 이상 사람이 알아볼 수 없는 기계어로 변환된 코드가 있는 파일
링킹(Linking) 과정
- 링커를 통해 오브젝트 파일들을 묶어 실행 파일로 만드는 과정이다.
컴파일러(compiler)와 인터프리터(interpreter)
이렇듯 고급 프로그래밍 언어를 사용하게 되면서, 이를 어셈블리어로 번역해주는 작업의 역사 또한 시작됐다고 볼 수 있다. 앞서 말한 번역을 하는 방식에는 2가지가 있는데 하나는 컴파일러 방식이고 하나는 인터프리터 방식이다.
컴파일러(compiler)
- 전체 파일을 스캔하여 한꺼번에 번역한다.
- 초기 스캔시간이 오래 걸리지만, 한번 실행 파일이 만들어지고 나면 빠르다.
- 기계어 번역과정에서 더 많은 메모리를 사용한다.
- 전체 코드를 스캔하는 과정에서 모든 오류를 한꺼번에 출력해주기 때문에 실행 전에 오류를 알 수 있다.
- 대표적인 언어로 C, C++, JAVA 등이 있다.
인터프리터(interpreter)
- 프로그램 실행시 한 번에 한 문장씩 번역한다.
- 한번에 한문장씩 번역후 실행 시키기 때문에 실행 시간이 느리다.
- 컴파일러와 같은 오브젝트 코드 생성과정이 없기 때문에 메모리 효율이 좋다.
- 프로그램을 실행시키고 나서 오류를 발견하면 바로 실행을 중지 시킨다. 실행 후에 오류를 알 수 있다.
- 대표적인 언어로 Python, Ruby, Javascript 등이 있다.