devmae
개발자 향기
devmae
전체 방문자
오늘
어제
  • 전부 감상 (280)
    • Unity (52)
      • memo (37)
      • R&D (15)
    • 모바일 (32)
      • iOS (6)
      • Android (25)
    • 개발자 모드 (41)
      • 개발자처럼 파고들기 (28)
      • 한가해서 책읽는거 아님 (10)
      • 영상 요약 (3)
    • Languages (40)
      • C++ (23)
      • MFC (8)
      • Java (4)
      • javascript (5)
    • Flash (108)
      • tip (29)
      • tech (4)
      • as2.0 (1)
      • as3isolib (3)
      • flartoolkit (2)
      • 이미지 편집기 (2)
      • papervision3d (12)
      • scale form (2)
      • Flash Builder (12)
      • air (5)
      • as3.0 (20)
      • flash player (9)
      • 개념잡기 (6)
      • source (1)
    • +,-,×,÷ (3)
      • 수학 뽀개기 (3)

블로그 메뉴

  • 홈
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
devmae

개발자 향기

Languages/C++

[펌]전처리기, 컴파일러, 어셈블러, 링커의 역할

2012. 10. 4. 12:05

컴퓨터는0과 1로 이루어진 이진코드(바이너리 코드)만 이해 할 수 있습니다.

 

따라서 C/C++언어로 컴퓨터에게 명령을 내릴 때에는  

C/C++언어를 이진코드(기계어)로 번역하는 과정이 필요합니다. 

 

▼ 소스 코드가 실행 파일이 되기까지의 과정 

 

 

전처리기 

#으로 시작하는 지시자에 따라 실행파일 생성에서 가장 먼저 실행됩니다.

소스 코드의 주석 제거, define 치환 등.

 

컴파일러

전처리기를 거친 소스 코드는 컴파일러에 의해서 어셈블리 코드로 변환됩니다.

어셈블리 코드는 CPU 명령어 조합입니다.  

(어셈블리어는 CPU에 의존적) 

 

어셈블러

컴파일러를 거친 어셈블리 코드는 어셈블러에 의해서 오브젝트 코드로 변환됩니다.

오브젝트 코드는 0과 1로 구성된 이진 코드이며, 주소 정보는 확정되지 않은 상태입니다.

 

링커

어셈블러를 거친 오브젝트 코드는 링커에 의해 하나로 묶여 실행 파일로 변환됩니다.

운영체제의 Loader가 로딩할 수 있도록 주소 정보를 적절하게 할당.  

(링커는운영체제에 의존적) 


<출처 : http://blog.naver.com/seisro/100161911435>

저작자표시 (새창열림)
    'Languages/C++' 카테고리의 다른 글
    • [펌]typedef으로 새로운 데이터형의 이름을 정의하는 방법
    • [펌]헤더파일 중복방지 #pragma once vs #ifndef~#endif
    • [펌]Function
    • delete 후에 NULL 집어넣기
    devmae
    devmae
    enjoy with me?

    티스토리툴바