1. 개념 요약

구분 정의 특징
고급 언어 인간이 이해하기 쉬운 추상화된 프로그래밍 언어 (C, Python, Java 등) - 하드웨어 독립적- 복잡한 작업 간소화
저급 언어 컴퓨터가 직접 실행하는 언어 (기계어) - 0과 1의 이진 코드- 특정 하드웨어에 종속적
어셈블리어 기계어와 1:1 대응되는 저급 언어 (MOV, ADD 등) - 고급 언어와 기계어 사이 중간 계층- 하드웨어 제어 최적화 가능
컴파일 방식 전체 소스코드를 한 번에 저급 언어로 변환 - 실행 전 모든 오류 검출- 실행 속도 빠름 (ex: C, C++)
인터프리트 방식 소스코드를 한 줄씩 저급 언어로 변환하며 실행 - 오류 발생 전까지 실행 가능- 실시간 디버깅 용이 (ex: Python, JavaScript)

2. 배경 지식

명령어 구조

[ 연산 코드(Opcode) | 오퍼랜드(Operand) ]

주소 지정 방식 비교

방식 동작 장점 단점
즉시(Immediate) 오퍼랜드 = 직접 데이터 속도 빠름 데이터 크기 제한
직접(Direct) 오퍼랜드 = 유효 주소 간단한 구현 주소 표현 범위 제한
간접(Indirect) 오퍼랜드 = 유효 주소의 주소 큰 주소 공간 지원 속도 느림 (메모리 2회 접근)
레지스터(Register) 오퍼랜드 = 데이터가 저장된 레지스터 빠른 접근 속도 레지스터 수 제한
레지스터 간접 레지스터에 저장된 주소로 데이터 접근 유연한 주소 지정 간접 방식과 동일한 속도 저하

3. 상세 설명

컴파일 vs 인터프리트

구분 컴파일(Compile) 인터프리트(Interpret)
변환 시점 실행 전 전체 코드 변환 실행 시 한 줄씩 변환
오류 처리 컴파일 실패 시 실행 불가 오류 라인 전까지 실행 가능
성능 실행 속도 빠름 실시간 변환으로 상대적 느림
대표 언어 C, C++, Go Python, JavaScript, Ruby

C 언어 컴파일 과정

deepseek_mermaid_20250629_81d047.png

  1. 전처리(Preprocess)
  2. 컴파일(Compile)
  3. 어셈블(Assemble)
  4. 링킹(Linking)