[CS] 코드의 번역과 통역

Cookie·2024년 9월 21일
0

ComputerScience

목록 보기
1/9

Complie(번역언어)

프로그래밍 언어로 코드를 짜고 나서, 코드를 실행하기 전에 컴퓨터가 읽을 수 있는 언어인 기계어로 “미리” 번역을 함

코드를 실행할 때는 컴퓨터에게 번역본을 건내줌


장단점

장점

  • 빠른 실행 속도
    : 컴파일된 기계어 코드는 컴퓨터가 직접 이해하기 때문에 실행 속도가 매우 빠름

  • 효율적인 메모리 사용
    : 컴파일 과정에서 불필요한 코드를 제거하여 메모리를 효율적으로 사용

  • 독립적인 실행 파일
    : 실행 파일은 별도의 프로그램 없이도 실행될 수 있으므로 배포에 용이

    또한, 컴파일 과정에서 코드의 오류를 사전에 발견할 수 있음

단점

  • 개발 시간
    : 프로그램 실행을 위한 모든 파일을 스캔하기 때문에 초기 스캔이 오래걸림
    또한, 수정사항이 생길때마다 전체를 다시 컴파일 해야함

대표적인 컴파일 언어: C, C++, C#, Objective-C 등



Complie의 과정

*혹은 Build과정 : 컴파일 + 링킹 과정

4단계

  • 1.전처리 과정 → 2.컴파일 과정 → 3.어셈블리 과정 → 4.링킹 과정

1단계 전처리 과정

전처리기(Preprocessor)를 통해 소스 코드 파일(.c)을 전처리된 소스 코드(*.i)로 변환하는 과정

  • 주석 제거
    • 컴퓨터가 읽을 필요가 없기 때문에 주석을 전부 제거함
  • 헤더 파일 삽입
    • 외부에 선언된 헤더 파일을 현재 소스코드에 포함 시킴.

    • 헤더 파일은 컴파일에 사용되지 않고, 선언된 함수 원형은 후에 링킹 과정을 통해 실제 함수가정의 되어있는 오브젝트 파일과 결합함

      ex) C소스 내에 include 하면 전처리기가 include한 자리에 헤더파일의 내용을 붙임

  • 매크로의 치환 및 적용
    • #define지시문에 정의된 매크로를 저장하고 같은 문자열을 만나면 #define된 내용으로 치환함
    • 매크로 이름을 찾아서 정의한 값으로 전부 바꿔줌

2단계 컴파일 과정

컴파일러를 통해 전처리된 소스 코드 파일(.i)을 어셈블리어 파일(.s)로 변환하는 과정

이 과정에서 언어문법 검사와 Static영역(Data, BSS영역)들의 메모리 할당을 수행함

컴파일러의 구조


3단계 어셈블리 과정

어셈블러(Assembler)를 통해 어셈블리어 파일(.s)을 오브젝트 파일(.o)로 변환하는 과정

오브젝트 파일(*.o)
컴파일러나 어셈블러가 소스코드 파일을 컴파일 혹은 어셈블해서 생성되는 파일

기계어로 구성되어있음
이러한 코드로 구성된 파일을 Object File(오브젝트 파일)이라고 함

재배치 가능한 오브젝트 파일(Relocatable Object File) : 링킹하기 전의 오브젝트 파일
오브젝트 파일은 독립적으로 실행할 수 없음


4단계 링킹 과정

링커를 통해 오브젝트 파일(*.o)들을 묶어 실행파일로 만드는 과정

오브젝트 파일들과 라이브러리 파일들을 링크하여 하나의 실행 파일을 만듦

Linking(링킹)

실행 가능한 오브젝트 파일(Executable Object File) : 링킹을 통해 만들어지는 오브젝트 파일




Interprete(통역언어)

소스 코드를 한 줄씩 읽어서 해석하고 바로 실행함

  • 컴파일 과정이 필요하지 않으며, 인터프리터라는 프로그램이 소스 코드를 해석하여 실행

장단점

장점

  • 빠른 개발
    : 컴파일 과정이 없으므로 코드 수정 후 바로 결과를 확인할 수 있어 개발 속도가 빠름
  • 플랫폼 독립성
    : 인터프리터만 설치되어 있다면 어떤 운영체제에서도 실행 가능
  • 동적 타이핑
    : 변수의 자료형을 실행 시에 결정할 수 있어 유연한 프로그래밍

단점

  • 느린 실행 속도
    : 소스 코드를 매번 해석해야 하므로 실행 속도가 상대적으로 느림
  • 의존성
    : 인터프리터가 설치되어 있어야 실행 가능

대표적인 인터프리터 언어: Python, JavaScript, Ruby, PHP 등

profile
나만의 공부 일지... [임시 休]

0개의 댓글