
부스트코스 <David J. Malan - 모두를 위한 컴퓨터 과학(CS50 2019)> 강의를 듣고 작성한 내용입니다.
컴파일링
소스 코드
: 우리가 직접 작성한 코드
머신 코드
: 2진수로 작성된, 컴퓨터가 이해할 수 있는 코드
- 소스 코드를 머신 코드로 변환하는 작업을
컴파일러
라는 프로그램이 수행해준다.
- C언어에서는 make 툴을 이용하면 소스 파일의 링크, 컴파일, 빌드 작업을 자동화해준다.
이런 명령어를 실행할 때 아래 네 단계의 과정을 거치게 된다.
1. 전처리
(Precompile)
- 전처리기에 의해 수행된다.
- #으로 시작되는
C 소스 코드
가 전처리기에 실질적인 컴파일이 이루어지기 전에 무언가를 실행하라고 알려준다. // 예시
#include <stdio.h>
2. 컴파일
(Compile)
- 컴파일러라고 불리는 프로그램이 C 소스 코드를
어셈블리어
라는 저수준 프로그래밍 언어로 컴파일한다.
- C 코드를 어셈블리 코드로 변환시켜줌으로써
컴퓨터가 이해할 수 있는 언어와 최대한 가까운 프로그램으로
만드는 것.
3. 어셈블
(Assemble)
- 어셈블러가 어셈블리 코드를
오브젝트 코드
로 변환시킨다.
- 컴퓨터의 중앙처리장치가 프로그램을 어떻게 수행해야 하는지 알 수 있는 명령어 형태인
연속된 0과 1들
로 바꿔주는 것.
- 소스 코드에서 오브젝트 코드로 컴파일 되어야 할 파일이 한 개 뿐이라면, 컴파일 작업이 여기서 마무리된다. 그렇지 않은 경우, 링크 단계가 추가된다.
4. 링크
(Link)
프로그램이 여러 개의 파일로 이루어져 있어 하나의 오브젝트 파일로 합쳐져야 한다면
, 이 단계가 추가된다.
- 여러 개의 다른 오브젝트 코드 파일을
실행 가능한 하나의 오브젝트 코드 파일로
합쳐준다.
메모리
- 컴퓨터 안에서는 RAM이라고 불리는 물리적 칩이 메모리 역할을 한다.
- 문자열의 저장
- 문자열(string)은 문자(char)의 배열로 저장된다.
- 문자열의 각 문자는 메모리상에 연이어서 저장되며,
문자열 끝에는 NULL 종단 문자가 포함
된다. 때문에 (문자 개수 + 1)개 만큼의 메모리를 차지
한다.
- 메모리 구조
머신 코드 영역
: 프로그램이 실행될 때 그 프로그램이 컴파일된 바이너리
가 저장됨.
글로벌 영역
: 프로그램 안에서 저장된 전역 변수
가 저장됨.
힙 영역
: 메모리 할당 함수(malloc)로부터 할당된 메모리의 데이터
가 저장됨.
스택 영역
: 프로그램 내의 함수와 관련된 것
들이 저장됨.
