컴파일 과정
컴파일 언어
C언어의 실행과정
전처리
코드 작성 후, 컴파일러는 코드를 분석하기 전에 전처리를 수행한다. 전처리는 #include
와 같은 전처리기 지시자를 처리하고, 매크로(#define
등)를 확장하는 등의 작업을 수행한다.
예시
#include <stdio.h>
#define MAX_NUM = 100;
컴파일
전처리 후, 컴파일러는 코드를 분석하고 ccl에 의해 어셈블리어로 번역한다. 이 과정에서는 코드의 구문 및 의미를 검사하고, 기계어로 번역 가능한 형태로 변환한다.
어셈블링
컴파일 후, 어셈블러는 어셈블리어 코드를 기계어 코드로 변환한다. 이때, 어셈블러는 각각의 어셈블리어 명령어를 해당 플랫폼 아키텍처에 맞는 기계어 명령어로 치환한다.
링킹
컴파일 및 어셈블링 후, 링커는 여러 개의 오브젝트 파일을 하나의 실행 파일로 결합한다. 이때, 링커는 오브젝트 파일 간의 의존성을 검사하고, 함수 및 변수의 링킹을 수행한다.
실행
링킹 후, 실행 파일은 운영체제에 의해 메모리에 로드된다. 프로그램의 main()
함수가 실행되고, 프로그램은 사용자가 입력한 인자를 받아 실행된다.
인터프리터 언어
파이썬은 인터프리터 언어로서, 코드를 한 줄씩 읽어들여 즉시 실행하는 방식으로 동작한다.
파이썬의 실행 과정
- 소스 코드 읽기
- 파싱(Parsing)
- 바이트코드 생성
- 실행
소스 코드 읽기
파이썬 인터프리터는 코드를 실행하기 전, 먼저 소스 코드를 읽어들인다. 소스 코드는 .py 파일이나, 인터랙티브 모드에서 사용자가 입력한 코드가 될 수 있다.
파싱(Parsing)
소스 코드를 읽어들인 후, 파이썬 인터프리터는 파싱 과정을 거쳐 코드의 구문(syntax)을 분석하고 문법적으로 올바른지 체크한다.
바이트코드 생성
파싱을 완료한 후, 파이썬 인터프리터는 바이트코드(Bytecode)를 생성한다. 바이트코드는 파이썬의 중간 언어(Intermediate Language)로, 파싱된 코드를 컴퓨터가 이해하는 기계어로 변환하기 위한 중간 단계이다. 바이트코드는 .pyc 파일에 저장되며, 이후 실행 시 재사용될 수 있다.
실행
바이트코드 생성 후, 파이썬 인터프리터는 바이트코드를 실행한다. 이때, 바이트코드는 스택 기반 가상 머신(Virtual Machine)에서 실행된다. 파이썬의 가상 머신은, 스택(Stack)과 프레임(Frame)을 이용하여 함수 호출과 반환, 변수 할당 등의 연산을 수행한다.