컴파일러와 인터프리터
컴파일러와 인터프리터는 이름그대로 소스코드를 실행 가능한 형태로 번역하는 도구.
고급 프로그래밍 언어로 작성된 소스코드를 기계어로 번역 및 실행하기 위한 프로그램이다.
1. 컴파일러
소스코드 전체를 분석하고 그다음 기계어로 번역 후 실행한다.
C, JAVA와 같은 언어는 컴파일러에 의해 컴파일(기계어로 번역)되고 실행됨.
2. 인터프리터
한줄씩 소스코드를 번역하고 실행한다.
Python, javascript와 같은 언어들이 인터프리터에 의해 번역 및 실행됨.
3. 컴파일러와 인터프리터 차이점
3-1. 실행방식
컴파일러 : 소스코드를 전체적으로 번역해서 기계어로 변환을 한 후에 실행 파일을 생성. 프로그램 실행 전에 번역이 이뤄짐.
인터프리터 : 소스코드를 한줄씩 읽고 번역하면서 즉시 실행. 프로그램 실행 중에 번역이 이루어짐
3-2. 속도
컴파일러 : 이미 번역된 코드를 실행하는거니까 실행속도가 빠름
인터프리터 : 실행할 때마다 코드를 번역해야하기 때문에 실행 속도가 느림
3-3. 오류발견 시점
컴파일러 : 컴파일이 성공해야 실행파일이 생성되므로 컴파일 시점에서 오류를 발견할 수 있음
인터프리터 : 코드를 실행하는 도중에서야 오류를 발견할 수 있고, 오류가 발생하면 프로그램이 멈춤
3-4. 사용사례
컴파일러 : 성능과 속도가 중요한 게임이나, 운영체제같은 대규모 프로그램
인터프리터 : 코드 수정 후에 바로 결과를 확인할 수 있기 때문에 테스트나 디버깅이 중요한 경우, 또 프로토타입 개발중에 수정이 많이 필요한 경우
4. 파이썬의 프로그래밍 실행 과정
파이썬 소스코드 작성 .py
→ PVM(파이썬 가상 머신)을 통해 바이트코드로 변환 .pyc
→ PVM이 바이트코드를 해석하고 기계어로 명령을 실행
메모리영역
메모리에는 작업을 효율적으로 하기 위해 다양한 영역들로 나뉘고
이 영역들은 운영체제에 의해 관리된다.
1. 코드 영역
프로그램을 실행하기 위해 명령어들이 저장되는 공간.
우리가 작성한 소스코드들에 의해 생성된 명령어들이 이곳에 저장됨
2. 데이터 영역
static(정적) 변수, 전역 변수와 같은 데이터들이 이곳에 저장됨
프로그램 시작과 함께 할당되고 프로그램이 종료될 때 소멸됨
3. Heap 힙 영역
동적 메모리 할당을 위한 곳으로 프로그래머가 직접 사용 및 관리해야하는 메모리 영역.
본래 해당 영역에서 사용한 메모리는 사용자가 직접 해제 해줘야하지만,
파이썬은 가비지컬렉터가 있어서 자동으로 해준다.
큐와 같은 자료구조가 여기서 생성 및 사용됨
4. Stack 스택 영역
정적 메모리 할당을 위한 곳으로 함수, 지역변수, 매개변수 등을 사용하기 위한 공간
함수가 시작할 때 지역변수가 살아나고 함수가 끝나면 지역변수는 죽는다.
재귀함수를 사용할 때 이곳을 사용
'CS' 카테고리의 다른 글
[CS] OOP 객체지향 프로그래밍 (0) | 2024.07.30 |
---|---|
[CS] 소프트웨어 설계 (0) | 2024.07.29 |
[CS] 자료형/자료구조 (0) | 2024.07.26 |
[CS] 운영체제 (0) | 2024.07.26 |
[CS] 하드웨어 - 컴퓨터구조 (1) | 2024.07.26 |