[C언어] GCC(GNU Compiler Collection)

2024. 7. 26. 20:51· CS
목차
  1. C언어의 컴파일 과정
  2. GCC(GNU Compiler Collection)
  3. GCC 컴파일러의 최적화 옵션
728x90

C언어의 컴파일 과정

먼저 C언어의 컴파일 과정은 아래와 같습니다.

 

1. C언어로 작성된 소스코드를 전처리(Preprocessing) 과정을 거칩니다.

- 전처리 과정에서 #define으로 정의된 매크로를 실제 값으로 치환하고, #include에 따라 파일을 소스코드에 포함하고, 주석을 제거하는 등의 작업이 진행됩니다.

 

2. 전처리 과정을 거친 소스코드를 컴파일러를 통해 어셈블리어로 변환(Compilation)합니다.

- 소스 코드를 구문 분석하고 구문 트리를 생성합니다.

- 구문 트리를 바탕으로 중간 코드를 생성하고, 중간 코드 최적화 진행 후 어셈블리어로 변환합니다.

 

3. 어셈블러가 어셈블리어를 기계어 코드(목적 파일)로 변환(Assemble)합니다.

- 어셈블리어 명령어를 해석하여 기계어 명령어(인스트럭션)로 변환합니다.

- 각 소스파일에 대한 목적파일을 생성합니다.

 

4. 링커를 통해 여러 개의 목적 파일과 라이브러리를 결합(Linking)하여 실행 파일을 생성합니다.

- 실행 파일 내의 코드 및 데이터에 대한 실제 메모리 주소를 할당합니다.

- 표준 라이브러리나 사용자 정의 라이브러리와 목적 파일을 결합합니다.

 

GCC(GNU Compiler Collection)

위 과정에서 사용된 컴파일러의 역할을 하는 것이 바로 오늘 우리가 알아볼 GCC입니다. 대표적인 컴파일러의 종류에는 Clang, GCC, MSVC, Intel C++ Compiler가 있습니다.

 

각 컴파일러마다 가지는 특징, 장단점이 존재합니다.

 

GCC 컴파일러는 아래와 같은 특징, 장점, 단점을 가집니다.

특징: GNU 프로젝트에서 개발한 오픈 소스 컴파일러입니다. C 언어 외에 C++, Objective-C, Fortran, Ada 등 다양한 언어를 지원합니다. 주로 리눅스/유닉스 시스템, 크로스 컴파일 환경에서 사용합니다.

 

장점: GCC는 최적화 옵션을 통해 컴파일 시의 최적화 수준을 선택할 수 있습니다.

단점: 옵션 및 설정이 복잡하고, 컴파일 속도가 타 컴파일러에 비해 상대적으로 느립니다. 

 

이러한 GCC의 다양한 언어 지원, 광범위한 플랫폼 지원, 그리고 강력한 최적화 기능으로 인해 GCC는 전 세계적으로 가장 널리 사용되는 컴파일러가 되었습니다.

 

GCC 컴파일러의 최적화 옵션

GCC에서는 다양한 최적화 옵션을 제공합니다. GCC는 아래와 같은 주요 최적화 옵션을 제공합니다.

 

1. -O1, -O2, -O3, -Os, -Ofast

  • -O1: 컴파일 속도와 실행 속도 간의 균형을 맞춘 최적화 단계입니다.
  • -O2: 더 많은 최적화를 수행하기 위해서 실행 속도를 향상시킨 최적화 단계입니다.
  • -O3: 모든 최적화 기술을 사용하여 최대한의 성능을 끌어낸 최적화 단계입니다.
  • -Os: 코드의 크기를 최소화하는 최적화입니다.
  • -Ofast: -O3 단계의 최적화에서 특정 비표준 최적화를 수행한 단계입니다.

즉 최적화 단계에서 숫자가 커질수록 더 고도의 최적화가 이루어지는 것을 알 수 있습니다. 최적화 수준이 높아질수록 성능 및 실행속도가 향상됩니다.

 

2. -Og

앞서 설명했던 -O1, -O2 등 최적화들이 성능을 향상에 초점을 맞춘 최적화였다면 -Og 최적화는 이용자로 하여금 디버깅을 할 수 있게 하기 위해 최적화를 최소한으로 진행합니다. 즉 디버깅과 최적화에 밸런스를 맞춘 옵션입니다.

728x90

'CS' 카테고리의 다른 글

[CS] OSI 7계층(OSI Model)  (0) 2024.08.16
[CS] BSD 소켓(Socket)  (0) 2024.08.16
[CS] 가상화(Virtualization)  (3) 2024.07.26
[C언어] 포인터(Pointer)  (1) 2024.07.25
[운영체제] CSAPP 1장 정리(수정 중)  (5) 2024.07.16
  1. C언어의 컴파일 과정
  2. GCC(GNU Compiler Collection)
  3. GCC 컴파일러의 최적화 옵션
'CS' 카테고리의 다른 글
  • [CS] OSI 7계층(OSI Model)
  • [CS] BSD 소켓(Socket)
  • [CS] 가상화(Virtualization)
  • [C언어] 포인터(Pointer)
pseudocoder_
pseudocoder_
IE stands for Industrial Engineering, not Internet Explorer ;) 공부한 것을 정리합니다. 가끔 일상도 올려요.
pseudocoder_
코드깎는 IE
pseudocoder_
전체
오늘
어제
  • 분류 전체보기 (54)
    • AI (3)
    • Architecture (1)
    • CS (9)
    • DB (0)
    • Design Pattern (1)
    • Docker (0)
    • Git (0)
    • Java (17)
    • Spring (2)
    • TIL (2)
    • 먹고 자고 개발하는 이야기 (7)
    • 코테 문제 (4)
    • 자료구조 및 알고리즘 (10)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

hELLO · Designed By 정상우.v4.2.2
pseudocoder_
[C언어] GCC(GNU Compiler Collection)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.