본문 바로가기
개발일지

hello, world

by Peter.JH 2023. 10. 14.
728x90
#include <studio.h>

int main()
{
 print("hello, world\n");
 return 0;
}

hello.c 파일이 어떻게 동작하는가에 대해 이해해보자

hello.c파일이 실행되기전에 컴퓨터가 이해할수 있는 인스트럭션들로 번역이 되어야한다. 

 

hello.c텍스트 파일이다. 0또는 1로 표시되는 비트들의 연속이며, 바이트라는 8비트 단위로 구성된다. 

(비트(bit, binary digit)는 하나의 비트는 0이나 1의 값을 가질 수 있고, 각각은 참, 거짓 혹은 서로 배타적인 상태를 나타낸다.바이트는 비트가 여러 개 모인 것이다.8비트 단위로 구성되는 이유는 1개 문자를 처리하는 데 8비트를 사용하기 때문이다. 정보처리의 기본단위로 사용하고 있다. )

 

Pre-processor(전처리단계, cpp):

본래의 C프로그램을 #문자로 시작하는 drective에 따라 수정한다. 

#include <studio.h>는 전처리기에게 시스템 헤어파일인 stdio.h를 프로그램 문장에 직접 삽입하라고 지시한다.  

(studio.h는 standard input output의 약자, h는 header의 약자)

그 결과 .i로 끝나는 새로운 C프로그램 생성

 

Compiler(컴파일 단계): 텍스트파일(hello.i)을 텍스트파일(hello.s)로 번역한다. 이 파일에는 어셈블리어 프로그램이 저장된다. (어셈블리어( assembly language )는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어)

파일은 번역하는 이유는 다음단계에 전달해주기 위함이다. 다음과 같은 어셈블리러어로 된 main 함수의 정의를 포함한다. 

 

main:
subq	$8, %rsp
movl	$.LCO, %edi
call	puts
movl	$0, %eax
addq	$8, %rsp
ret

 

Assembler(어셈블리 단계): 어셈블러는 hello.s 를 기계어 인스트럭션(컴퓨터가 알아들을 수 있는 기계어로 이루어진 명령)으로 번역한다. 다시 재배치가능 목적프로그램(컴파일러 또는 어셈블러에 의하여 각각 독립적으로 번역되어 생성된, 재배치 가능한 여러 개의 목적 프로그램들을 하나의 실행 프로그램으로 합치는 로더)형태로 묶어서 hello.o라는 목적파일에 그 결과를 저장한다. 

 

Linker(링크 단계): hello 프로그램이 C 컨파일러에서 제공하는 표준 라이브러리에 들어있는 prtinf 함수는 이미 컨파일된 별도의 목적파일인 printf.o에 들어 있으며, 이 파일은 hello.o파일과 어떤 형태로든 결합되어야 한다. 링커 프로그램이 이 통합 작업을 수행한다. 그 결과인 hello파일은 실행파일로 메모리에 적재되어 시스템에 의해 실행된다. 

728x90

'개발일지' 카테고리의 다른 글

pintos - THREADS(1)  (0) 2023.11.28
웹서버만들기(1)  (4) 2023.11.17
복잡도(BigO,시간,공간)  (0) 2023.10.21
반복문과 재귀함수  (0) 2023.10.21
배열, 문자열에 대해 알아보자  (0) 2023.10.21