[ TIL 02 ] CS50 강의 노트(2)

부스트코스 <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)로부터 할당된 메모리의 데이터가 저장됨.
    • 스택 영역: 프로그램 내의 함수와 관련된 것들이 저장됨.

좋은 웹페이지 즐겨찾기