ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 변수 및 바인딩
    전공/프로그래밍 언어론 2020. 5. 4. 10:08

    변수

    - 기억장소(main memory)의 하나의 장소(cell)을 추상화한 것.

    - 원하는 데이터의 값을 저장할 수 있다.

    - 속성

       1. Address(기억장소의 주소, l-value)

       2. Value(값, r-value)

       3. Type(변수 값의 범위와 가능한 연산의 집합 결정)

       4. Scope(변수가 사용될 수 있는 프로그램의 부분)

       5. Lifetime(변수와 연관된 기억장소의 할당 기간)

       6. Type checking

       7. Initialization

     

    선언문

    - 프로그램 실행 시에 사용할 데이터의 속성에 관한 정보(type, name, size 등)를 컴파일러에게 알려주는 문장.

    -  예 : int a[10];

    - 컴파일러가 소스 코드를 기계어로 번역할 때 필요로 하는 중요한 정보.

    - 메모리가 얼마나 필요할지 계산할 수 있어 효율적인 주기억장치 관리가 가능.

    - 서로 맞지 않는 연산자와 변수의 형이 연관되어 있는 잘못된 문장을 컴파일 시간에 미리 알아낼 수 있어 프로그램의 오류를 줄일 수 있음(Static type checking, compile-time binding).

     

    인터프리터는 실행 시간에 이런 것들을 다 계산하기 때문에 느린 것이고, 컴파일 언어는 컴파일러가 알아서 해주므로 실행 시간이 빠른 것이다.

     

    바인딩

    - 프로그램의 요소에 지정 가능한 속성값을 지정하는 것.

    - 언어 설계 시간(Design time), 언어 구현 시간(Implementation time), 컴파일 시간, 적재 시간 및 실행 시간(Execution time)에 이루어질 수 있다.

    - 바인딩 시간

    1. 동적 바인딩 : 실행 시간 중에 일어남.

    - 인터프리터형 언어(예 : JavaScript)

    - 인터프리터형 언어는 명시적인 선언을 요구하지 않으며, 실행 시간에 변수의 값을 지정할 때까지 변수의 형을 바인딩하지 않는다.

    - 변수의 유형 및 기억장소 할당 등이 실행시간에 이루어지므로 프로그램의 실행이 지연되는 것은 당연하다.  

    2. 정적 바인딩 : 프로그램이 실행되기 전(주로 컴파일할 때)에 바인딩이 발생하는 것.

    - 수치 계산을 목적으로 개발된 언어.

    - 컴파일할 때 대부분의 속성을 결정하여 실행 시간의 오버헤드를 줄임.

     

    배정문

    - 모든 변수는 l-value와 r-value를 가진다. l-value는 주소, r-value는 변수의 값을 의미한다.

    - Constant(상수)는 r-value만 가지고 있으므로 값을 할당하려고 하면 에러가 발생한다.

    - C에서 정수 포인터를 int *ip;와 같이 선언하였다면, 변수 ip의 l-value는 ip 자신의 주소이며, r-value는 다른 변수의 주소(l-value)가 된다.

     

    스코프

    1. 정적 영역 규칙(static scope rule)

    - 프로그램의 실행 순서와 무관하게 프로그램 블록의 포함 관계에 따라 변수의 영역을 결정.

    - 블록 내의 모든 비지역 변수는 자신을 둘러싸고 있는 가장 가까운 블록에서 선언된 변수를 참조.

    2. 동적 영역 규칙(dynamic scope rule)

    - 함수 호출 순서에 기반을 둔 것.

    - 동적 영역은 실행 시간에 결정된다. 즉 실행 중인 블록 안에 있는 비지역 변수를 참조함에 있어서 자신을 호출한 함수에서의 정의를 사용한다. 그러므로 비지역 변수의 값은 실행 시간에 어떤 함수가 자신을 호출했는가에 따라서 결정된다.

     

    수명

    - 변수가 메모리에 할당되는 시간부터 그 역할을 마치고 저장 공간이 반환되는 시간까지.

    - 블럭 구조 언어에서는 지역 변수의 영역과 수명이 일치한다.

    - static 변수느 한 번 할당되면 프로그램이 종료될 때까지 기억장소가 회수되지 않는다.

     

    메모리 바인딩과 변수의 종류

    1. static 변수(정적 변수)

    - 스택에 저장된다.

    - 프로그램 실행 전에 메모리 셀에 연관(바인딩)되고, 프로그램이 종료될 때까지 동일한 메모리 셀에 대한 바인딩이 유지된다.

    - 전역 변수.

    2. static-dynamic 변수(스택-동적 변수)

    - 스택에 저장된다.

    - 변수가 선언된 블록이 실행될 때 기억장소 바인딩이 이루어진다. 기억 장소의 할당과 회수가 프로그램의 실행 시간에 이루어진다. → 할당 받은 메모리를 해제해야하므로 실행 시간 효율성이 정적 변수에 비해 떨어지는 단점이 있다.

    - 지역 변수.

    3. explicit heap-dynamic 변수(명시적 힙-동적 변수)

    - 힙에 저장된다.

    - 프로그래머가 명시하는 명시적 실행 시간 명령어(C에서의 malloc(), free() 함수나 C++에서의 new, delete 연산자)에 의해 할당되고 회수되는 이름이 없는 메모리 셀에 연관된 변수.

     

    '전공 > 프로그래밍 언어론' 카테고리의 다른 글

    기본 데이터 형(primitive data types)  (0) 2020.05.14
    1. 프로그래밍 언어의 소개  (0) 2020.05.02
Designed by Tistory.