Compiler

Education/C++ programming 2012. 1. 13. 11:28

 
  1. 컴파일러(Compiler)

    • 컴퓨터가 이해할 수 있는 기계어 코드로 변역해주는 역할

    • 컴파일 프로그램은 대개 디스트에 저장,

    • 컴파일러는 실행 시에 모든 문장을 먼저 구문적으로 하나씩 분해

    • 다른 문장을 참조하는 경우 그 문장이 정확하게 참조될 수 있도록 여러번의 연속적인 상태에서 결과코드 생성

    • 원시프로그램(Source program)을 기계어(Machine language)로 변환시켜 목적프로그램(Object program)으로 번역해주는 특수한 프로그램

      • 목적프로그램(Object program) : 프로세서가 한 번에 한 명령씩 처리하거나 또는 실행시킬 수 있는 기계코드

    • 목적파일을 실행파일로 바꾸기 위한 처리

      • 실행파일이 운영체제의 요건에 맞도록 형태를 바꿈

      • 스타트업(StartUp)이라는 추가코드 가져와야 함

      • 링크(Link) : 목적파일에 실행파일로 만드는 동작

      • 링커(Linker) : 링크를 해주는 프로그램

    • 프로그램 작성되는 과정

      • 소스파일은 컴파일러에 의해 컴파일되어 목적파일 됨

      • 목적파일은 링커에 의해 링크되어 최종적으로 실행파일 됨

        [소스코드] --컴파일--> [목적파일] --링커--> [실행파일] 


    • 빌드(Build) : 컴파일과 링크를 통해 실행파일을 만드는 과정

    • 소스파일을 번역하여 곧바로 실행파일을 만들지 않고 목적파일을 거치는 이유

      • 여러개의 소스를 합쳐서 하나의 실행파일 생성때문임

    • 각 소스파일의 명령을 번역한 기계 코드를 가진 목적 파일의 연결하여 하나의 실행파일 생성

    • 링크단계에서 이미 만들어진 라이브러리도 결합


  1. 인터프리터(Interpreter)

    • 원시코드 명령문들을 한 번에 한 줄씩 읽어들여서 실행하는 프로그램

    • 원시프로그램 문장들이 입력되면 인터프리터는 문장들의 기능을 정의하고 그 기능대로 수행됨

    • 컴퓨터의 주기억장치에 저장된 프로그램이나 또는 많은 프로그램에서는 ROM 형태로 되어있음

    • 목적프로그램에 의해서 수행되는 것보다 프로그램의 수행속도가 훨씬 느림

      • 각 명령들을 매번 통역해야하기 때문임


  1. 컴파일러와 인터프리터의 차이점

    • 실행

      • 컴파일러

원시 프로그램 -> 컴파일러 -> 목적 프로그램

      • 인터프리터

원시 프로그램-> 인터프리터 -> 실행 명령문

    • 프로그램 수행 속도

      • 컴파일러

        • 번역시간은 조금 걸리지만 수행속도 빠름

          • 프로그램 단위로 프로그램 전체를 함께 번역하고 함께 수행

      • 인터프리터

        • 수행속도 느림

          • 한 줄씩 한 줄씩 번역하고 수행

        • CPU 사용 시간 낭비

    • 메모리 할당

      • 컴파일러

        • 메모리를 많이 사용

          • 프로그램을 번역한 뒤, 번역된 기계어를 저장하기 위해 메모리 사용

      • 인터프리터

        • 메모리를 사용하지 않음

          • 프로그램을 한 줄씩 번역하고 곧바로 수행하므로 메모리 사용안함

    • 프로그램 저장 위치

      • 컴파일러

        • 디스크에 저장

      • 인터프리터

        • ROM에 저장

    • 사용분야

      • 컴파일러

        • 실행 시간의 효율성을 중하는 프로그래밍 언어

      • 인터프리터

        • 사용자의 융통성을 중시하는 프로그래밍 언어

    • 정리

비교단위

컴파일러

인터프리터

번역단위

프로그램 단위 번역

명령 줄 단위로 번역

수행과정

함께 번역, 함께 수행

줄 단위로 변역 수행

목적프로그램

번역 후 저장을 위해 필요

바로 수행하므로 불필요

효율성

효율성 좋음

효율성 떨어짐

기억장소

많이 필요

적게 필요



'Education > C++ programming' 카테고리의 다른 글

Variable  (1) 2012.01.13
리눅스 c++ 컴파일  (2) 2009.11.24
Triangle & Rectangle program code  (0) 2009.11.24
피보나치 수열  (2) 2009.11.24
Posted by 초상큼발랄
l

Variable

Education/C++ programming 2012. 1. 13. 11:16

 
  1. 변수(Variable)

    • 전역변수(Global variable)

      • 선언 위치 : 함수 바깥에서 선언

      • 통용 범위 : 프로그램 전체가 공유

        • 선언된 위치 이후에는 어디서든지 이 변수를 사용 가능

      • 파괴 시기 : 프로그램과 동일

        • 실행 직후에 생성되어 프로그램이 실행되는 동안에는 계속 메모리를 차지하고 있으며 프로그램이 종료되면 파괴됨

      • 생성되는 기억 장소 : 정적 데이터 영역

        • 한번 정해진 메모리 위치에 계속 남아 있어야하므로 정적 데이터 영역에 생성

        • 정적 데이터 영역 (페이지 참조)

          • 프로그램 코드 바로 다음에 위치하는 실행 파일의 한 부분으로 프로그램이 실행될 때 메모리롤 로드되어 실행 중에 계속 유지

      • 초기화 : 0 으로 초기화

        • 별도의 초기식이 없더라도 0으로 초기화

        • 초기화와 소멸은 임의의 순서대로 이뤄짐

    • 지역변수(Local variable)

      • 선언 위치 : 함수 내부에서 선언

      • 통용 범위 : 자신이 선언된 함수

        • 자신이 선언된 함수에 소속되어 있기 때문에 함수 외부에서는 이 변수 사용 불가

      • 파괴 시기 : 변수가 선언된 특정 함수 내부 종료

        • 특정 함수 내부에서만 사용되므로 함수가 실행 중일때만 메모리를 차지

        • 특정 함수가 종료가 되면 지역변수도 함께 파괴

      • 생성되는 기억 장소 : 스택(Stack)

        • 프로그램 실행중에 생성, 파괴를 반복하므로 스택에 생성

        • 스택에 생성되기 때문에 통용 범위가 국한되고 종료되면 같이 사라짐

        • 스택(Stack)

          • 지역변수, 인수, 함수 실행 후 돌아갈 번지 등이 스택에 생성되었다가 사라졌다가를 반복

      • 초기화 : 초기화되지 않음

        • 별도의 초기식이 없을 경우 초기화되지 않음

        • 초기값을 명시적으로 지정

        • 지역변수가 생성된 스택 위치의 값이 그대로 출력

        • 스택에 어떠한 값이 들어있는지 예측할 수 없는 쓰레기값이 존재

      • 장점

        • 함수의 독립성 높임

        • 디버깅 효울 향상

        • 메모리 절약

        • 재귀 호출이나 상호 호출 같은 특별한 기법에서 필요


  1. 정적(Static)

    • 정적 변수(Static variable)

      • 기억장소는 전역적이고 통용범위는 지역적인 정적 변수

        • 선언 위치 : 함수의 선두

        • 통용 범위 : 함수 내부

        • 생성되는 기억 장소 : 정적 데이터 영역

        • 초기화 : 0 으로 초기화

          • 단 한번의 초기화

          • 정적 변수가 선언된 함수가 여러번 호출되더라도 초기화는 프로그램 생성할 때 한번만 초기화

    • 정적 함수(Static method)

      • 기억장소는 전역적이고 통용범위는 지역적인 정적 함수

      • 해당함수는 현재 파일 내에서만 사용

        • Internal linkage : 정의된 파일 내에서만 사용 가능

      • extern 키워드를 사용하더라도 외부 파일에서 해당변수 참조 불가능


  1. 외부 변수(External variable)

    • 외부 변수(External variable)

      • 함수의 어느 곳에서든지 선언될 수 있으며 프로그램의 어느 부분에서 사용될수 있는 변수

      • 선언된 이후 모든 함수에서 사용할 수 있는 변수

      • 초기화 : 0으로 초기화

      • 주로 파일간에 변수를 공유할 목적으로 이용


  1. 레지스터(Register)

    • 레지스터(Register)

      • CPU를 구성하는 부품 중 하나

      • CPU가 데이터를 처리하기 위해 사용되는 임시 작업장

      • 속도는 매우 빠름

      • 크기 : CPU의 비트수를 결정하는 중요한 기준

    • 레지스터 변수(Register variable)

      • 저장할 수 있는 변수 타입

        • int, unsigned, 포인터 형 등의 32비트형(32비트 일 경우)

      • 레지스터 변수는 두 개까지만 선언 가능

        • 만약 세 개 이상의 레지스터형 변수 선언시, 최초 두개의 레지스터 변수만 레지스터형이 되고 나머진 지역변수로 됨

        • CPU의 레지스터 개수가 많지 않기 때문에 레지스터형 변수 2개만 선언

      • 레지스터 변수는 지역변수에만 지정 가능

        • 레지스터는 한정된 자원이기 때문임

      • 빠른 속도를 얻기 위해 레지스터 변수를 사용

      • 대규모의 루프를 돌린다거나 할 때, 루프 제어 변수를 레지스터형으로 선언

        • 이 변수의 읽기, 증감 속도가 빨라지거나 전체 루프의 실행속도 빨라짐

      • & 연산자 사용 불가

        • 레지스터형 변수는 메모리에 생성되는 것이 아니기 때문에 사용 불가

        • CPU 내부에 있기 때문에 번지를 가지지 않으므로 &연산자로 이 변수의 메모리 주소 조사 불가능

      • * 연산자 사용 가능


  1. 프로그램(Program)

    • 프로그램 구성(Code, Data, Heap, Stack register)

      • 코드(Code)

        • 프로그램의 코드 자체를 구성하는 명령이나 기계어 명령이 존재

        • read-only 권한이므로 이곳에 데이터를 쓰려면 access violation 일어남

        • CPU가 읽어 들여 수행하므로 text라 부름

      • 데이타(Data)

        • 전역변수, 정적변수, 초기화된 배열과 그 구조들이 저장되는 영역

        • 프로그램이 시작될때 생성되고 프로그램이 종료 될 때 시스템에 반환

      • (Heap)

        • 프로그래머가 필요에 의해 동적으로 할당하는 메모리가 위치하는 영역

        • C++(또는 JAVA)에서 new, C에서는 malloc으로 할당

        • C 또는 C++에서는 할당된 메모리 해제 필수

        • JAVA에서는 자동으로 가비지콜렉션(Garbage collector)에 의해 자동 해제

        • 프로그램은 기본적으로 1MB 크기의 힙 영역을 할당

      • 스택(Stack)

        • 지역변수, 매개변수 및 복귀번지 등등 저장되는 영역

        • 함수 호출시 스택 영역에 생성되고 사용된 후 시스템에 반환

        • 함수 인자(Argument)를 보낼때는 인수를 역순으로 보낸 뒤 복귀 번지를 저장 → 선입후출(First In Last Out)

        • 쓰레드(Thread) 1개씩 생성

        • 기본 크기는 1MB이며, 용량 초과시 오버플로우(Stack overflow)발생

    • 코드, 데이타, 힙 영역은 하위 메모리 부터 할당

      • 데이타 영역 : 컴파일 타임(compile-time) 때 결정

        • compile-time에 데이터 영역 및 스택의 크기를 계산해서 필요한 메모리 공간의 정보를 파일에 함께 갖음

      • 힙 영역 : 런타임(run time)시 요구할 때마다 사용

    • 스택 영역은 상위 메모리 부터 할당

'Education > C++ programming' 카테고리의 다른 글

Compiler  (0) 2012.01.13
리눅스 c++ 컴파일  (2) 2009.11.24
Triangle & Rectangle program code  (0) 2009.11.24
피보나치 수열  (2) 2009.11.24
Posted by 초상큼발랄
l

2010 ITRC 워크샵

Photo 2011. 10. 14. 15:17
2010 년 10월 1일 ~2일
강원도 강릉 선 크루저 리조트


들어가는 입구




연구실 후배와 산책 중

'Photo' 카테고리의 다른 글

50  (0) 2010.08.04
제주도 원앙계곡  (2) 2010.07.08
돈내코 유원지  (2) 2010.07.04
진주식당  (0) 2010.07.04
제주 쌍둥이 횟집  (0) 2010.07.04
Posted by 초상큼발랄
l