우리가 쓴 코드가 어떻게 실행되는 것일까?
컴파일러의 역할은 무엇일까?
중간 중간 산출물은 도대체 뭘 위해 필요한 것일까?
알아보자
소스파일, Source File (원시 코드라고도 한다)
-> 프로그래밍 언어로 작성된 문서 (Text Editor로 쓰인 모든 문서)
-파일형식( filename.c 또는 .cpp)
Source File은 우리가 이해하기 쉬운 언어(프로그래밍 언어)로 쓴 것으로
Compiler를 이용해 어셈블리어라는 기계어 전 단계의 언어로 바꾼다.
** 누구는 컴파일러 자체가 기계어로 바꾼다하는데(사실이 아니다)
그렇게 Interface가 적어지면 범용성이 떨어진다.
중간에 Assembly 라는 Interface를 달아서 이식성과 범용성을 높인다.
++그러나 대부분의 컴파일러가 어셈블러를 겸하고 있어서 그런 말을 하는 것이다.
실제로 컴파일러 작동 후
어셈블리어를 다시 어셈블러가 Machinary Code로 바꾸어서 작동하게끔 한다.
**일반적으로 기계어와 1:1 대응이기 때문에 어셈블러에는 인스트럭션 테이블만 내장해 두고 치환만 일어난다.
이렇게 최종적으로 기계어로 바꾼 파일을 object code (목적 코드)이라고 한다.
이 파일은 (.obj) 확장자를 가지고 있다.
** 이 obj 파일이 Linker가 Linking 하는 대상이 되는 것이다.
하지만 기계어로 바꾼 것이 바로 컴퓨터에서 실행이 될까??
프로그램은 OS가 관리해서 실행시키는 것이기 OS가 인식할 수 있게 바꿔줘야 한다.
그것이 바로 링커, Linker이다.
Linker는 .obj 파일을 exe파일로 바꿔주어 실행될 수 있게 만든다.
Linking 과정에서는 obj 코드 외에도 부가적인 코드를 같이 링크시킨다.
예를 들어 C++의 라이브러리와 프로그램을 만드는 데 필요한 Start-up 코드를 함께 링크한다.
모든 내용을 요약하면
소스코드 ->
컴파일러를 이용 ->
obj 파일로 변함 ->
Linker를 이용하여 여러가지 코드를 Linking함->
exe 파일이 바로 실행코드(executable code)
'프로그래밍 지식 > C++' 카테고리의 다른 글
C++문법/ 오버로딩, Overloading (0) | 2021.11.30 |
---|---|
C++문법/ 함수 매개변수에서 * 과 &의 차이 ★★★★★ (0) | 2021.11.30 |
C++문법/ 디폴트 매개변수, Default Parameter (0) | 2021.11.30 |
C++문법/ 참조 변수, reference + 참조의 특성 (1) | 2021.11.29 |
C++문법/ 인라인 함수, inline (0) | 2021.11.25 |