바인딩 : 이름(변수, 배열, 라벨, 절차 등)을 그것이 포함하는 것(메모리 주소, 데이터 형 또는 실제 값)에 연결하는 작업
> 언어 설계시 : 연산자와 연산의 바인딩
> 언어 구현시 : 데이터 유형과 데이터 유형이 가질 수 있는 값의 바인딩(자료형)
> 프로그램 작성시 : 알고리즘, 데이터 구조, 모듈 이름에 대한 바인딩
> 컴파일 시 : 변수와 데이터 유형
> 링크 시 : 메모리 내의 프로그램 전체 레이아웃을 확정(개별 모듈 ex. lib)
> 로드 시 : 물리적 주소 선택 (C언어의 경우 정적변수)
> 실행 시 : 변수에 메모리 값을 바인딩
- 정적 바인딩 : 프로그램 실행 이전, 이른 바인딩(early binding)
> C언어에서 상수에 값을 바인딩
> C언어에서 함수의 정의에 함수 호출을 바인딩
- 동적 바인딩 : 프로그램 실행되는 동안, 늦은 바인딩(late binding)
> 메모리 주소와 포인터 변수를 바인딩
> C++에서 가상 멤버함수 정의에 멤버 함수의 호출을 바인딩
스코프 : 변수의 바인딩 변경이 없거나 최소한 변수의 재선언이 허락되지 않는 최대 범위
어떻게 변수와 관련된 이름을 참조할 지 결정
- 정적 스코프 : 프로그램의 물리적인 구조로 정의, 컴파일러에 의해 결정, 프로그램 텍스트를 검토하여 바인딩, 대부분의 컴파일 기반의 언어가 사용 (Cpp의 경우 네임스페이스 이용)
> 최근 내포 영역 규칙 : 중괄호로 구성된 블록을 해석, 동일 정적 스코프 내에 변수 선언이 존재 하지 않으면, 바로 상위 정적 스코프에서 찾음
- 동적 스코프 : 해석형 언어에서 사용, 자료형 결정이 항상 이루어 지지 않으므로 컴파일 시 자료형 체크 불가능, 바인딩을 위해 스택을 검토하여 스택의 직전 위치에서 시작해 아래쪽으로 검색 (함수내에 변수선언이 없으면 호출 이전 함수에서 검색)
'programing > Common' 카테고리의 다른 글
Git 정리 (0) | 2016.08.08 |
---|---|
Git 개념 가이드 (0) | 2016.08.05 |
DLL에서 STL 사용시 문제 (0) | 2015.05.14 |
C++ Optimization Strategies and Techniques (0) | 2015.05.08 |
프로그램 실행 과정 (0) | 2015.05.07 |