일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- atmega
- 알고리즘
- STM32 라인업
- 정렬알고리즘
- 아두이노
- Mega2560
- GPIO
- NUCLEO-F103RB
- S&P500
- STM32 개발환경
- STM32
- 아두이노 통신
- c#
- 코딩테스트
- STL
- 백준
- C++
- CubeIDE
- 객체지향
- flag 변수
- sort
- 코테
- STM32CubeIDE
- 유심 재발급
- 정렬
- Avr
- 유심 재발급 제한
- SPXL
- Microchip Studio
- STM32 IDE
- Today
- Total
뽕구의 개발일지
[CS지식] 컴파일러 본문
컴파일러
C, C++, Java, C# 등 프로그래밍 언어는 사람이 개발을 하기 위해 만들어진 사람이 이해할 수 있는 고급 언어입니다. 반면 컴퓨터는 사람이 이해하는 고급 언어를 이해할 수 없습니다. 컴퓨터는 1과 0만 이해할 수 있지요. 이를 저급 언어 혹은 기계어라고 합니다. 따라서 우리가 코딩한 프로그래밍 소스를 1과 0로 바꾸어 주는 즉, 번역해주는 녀석이 필요합니다.
고급 언어(프로그래밍 언어)를 다른 고급 언어, 저급 언어(기계어)로 번역해주는 번역기, "컴파일러" 입니다.
컴파일 과정
컴파일러의 컴파일 과정은 어떻게 진행될까요?
GCC 컴파일러 기준으로 보통 전처리, 컴파일, 어셈블리, 링커까지 4 단계 과정을 거칩니다. 개발과 업로드 과정을 포함해 아래와 같이 6 단계로 한번 알아보겠습니다.
순서대로 따라가보죠
- 코딩을 통해 소스코드 파일을 작성
Visual studio, Visual Code, Eclipse 와 같은 편집기로 C, C++, C# 등 코딩 진행. - 전처리 과정
소스코드를 분석하여 #include 된 헤더파일(*.h) 처리, #define된 매크로 처리.
main.i 파일 생성 - 컴파일 과정
고급 언어를 저급 언어로 변환.
main.i 파일이 Assembly 언어로 변환되며 실제 호출 및 사용되는 코드만 번역해 main.i보다 사이즈가 작은 main.s 파일 생성 - 어셈블리 과정
Assembly 언어를 기계어로 변환.
main.o 파일 생성 - 링커 과정
각 컴파일된 파일들을 하나의 기계어 프로그램으로 변환
*.hex, *.elf 파일 생성 - 프로그램 업로드
프로그램 메모리에 업로드
위와 같이 컴파일러의 개념과 6단계에 걸친 컴파일 과정을 알아보았습니다.
최종적으로 프로그램을 올릴 수 있는 파일은 *.hex와 *.elf 파일이 생성되는데
*.elf 파일 Executable and Linkable Format의 약어로 Unix 기반 시스템에서 실행 파일, 목적 파일, 공유 라이브러리, 코어 덤프 등 에 사용되는 포멧이고,
*.hex 파일 intel Hex format으로 ASCII 형식의 2진 데이터를 담은 파일 형식입니다.
Atmel 마이크로컨트롤러에 C언어로 코딩 시 최종적으로 *.hex 파일 생성되어 플래시 메모리에 올리는 과정이 있는데, 컴파일 시 어떤 과정을 거치어 최종 실행 가능한 프로그램 파일이 생성되는지 큰 그림에서는 이해가 되었습니다.
마치며..
컴파일러는 학부생때 고급언어를 저급언어로! 이정도만 알고 시험도 그정도만 본 것 같은데, 실제로 어떤 과정을 거치는지 알아보니 재밌었습니다. 프로그래밍에서 가장 중요한 단계네요..어떻게 만들었지?
컴파일러 만드신 분 존경합니다 정말로 :)
읽어주셔서 감사합니다!
'개발 일지 > 컴퓨터&소프트웨어공학' 카테고리의 다른 글
[객체지향] SOLID 설계 원칙 (0) | 2024.08.04 |
---|