1. 동적 기억장소 할당
- 동적 기억장소 할당 기법
- 프로그램 실행 중에 기억장소를 할당하는 기법
- 인터프리터 언어에 사용 - APL, LISP, Prolog등..
- 블록 기반 언어
- Algol60의 영향을 크게 받아 설계된 프로그래밍 언어
- 변수들의 영역을 제한하고, 프로그램을 적당한 단위 프로그램으로 나누어 구성할 수 있도록 블록 개념을 도입한 언어
- 블록 기반 언어에서의 단위 프로그램
- 블록 : 특정 블록의 실행 차례가 되었을 때 활성화됨, 지역 선언문을 가지며 새로운 실행 환경을 정의하기 위한 단위
- 부프로그램 : 호출문에 의하여 호출되었을 때 활성화 됨, 변수 영역이 블록에서의 변수 영역과 동일한 규칙을 따름
2. 시점에 따른 구분
1) 활성화 레코드의 크기가 정적으로 결정되는 경우
- 지역 변수들이 필요로 하는 기억장소 용량이 번역시간에 결정됨
- 지역 변수들의 생성은 단위 프로그램이 활성화되는 시점에 결정됨
- 준정적 변수(semi-static variable)
- 활성화 레코드의 크기는 정적 바인딩, 기억장소 할당은 동적 바인딩
- 재귀 호출을 가능하게 함
- 스택 기반의 기억장소 할당을 수행할 수 있어 효율적인 주기억장소 활용 가능
- 전형적인 활성화 레코드 구조
- 반환 주소 : 호출한 단위 활성화로 되돌아갈 주소
: 구성 : 호출자의 코드부에 대한 포인터, 호출 다음 명령어에 대한 코드부에서의 차감거리
- 동적 링크 : 호출한 활성화 레코드를 가리키는 주소값을 저장하는 포인터
: 동적 체인 : 현재 활성화된 활성화 레코드부터 동적 링크를 추적한 연결
- 나머지 활성화 레코드 정보
- 스택 기반 동적 기억장소 할당
-새로운 활성화가 발생되면 주 기억장소에 새로 할당
- 한 활성화의 실행이 끝나면 해당 레코들르 회수
- 호출 싱행 순서 : 활성화 레코드가 발생되었다가 회수되는 순서
2) 활성화 레코드의 크기가 활성화 시점에 결정되는 경우
- 준동적 변수(semi-dynamic variable)
- 단위 프로그램이 활성화되는 시점에 지역 변수들이 필요로 하는 기억장소 용량이 결정되고 생성
- 지역 변수들의 차감 거리가 번역시간에 상수값으로 확정되지 못하여 주소에 대한 최종 확정을 실행 시간까지 늦추어야 함
- 활성화 레코드의 크기가 동적 바인딩 되지만, 한 번 바인딩 되면 활성화된 프로그램이 종결될 때까지 크기가 변할 수 없음
- 준동적 변수 할당 순서
(1) 준정적 변수에 필요한 기억장소와 준동적 변수의 명세표에 대한 기억장소를 할당함
(2) 중동적 변수에 대한 기억장소의 실제 크기가 계산되면 그 때 계산된 기억장소만큼 활성화 레코드를 확장시켜 할당함
(3) 그 주소를 먼저 할당한 명세표의 포인터에 바인딩함
3) 활성화 레코드의 크기가 동적으로 변하는 경우
- 동적 변수(dynamic variable)
- 단위 프로그램의 실행 중에 새로운 자료값이 생성되고 회수되어 활성화 레코드의 크기가 동적으로 변함
- 프로그래머가 실행 중에 기억장소의 크기를 변화시키는 자료값을 다룰 수 있음
- 힙 기억장소 할당
- 동적 변수는 활성화 레코드와 함께 회수되지 않고 계속 더 유지될 수 있기 때문에, 스택에 할당되는 활성화 레코드에 할당이 불가능
- 힙 기억장소에 할당한 후 포인터 변수가 이를 가리키도록 바인딩
'프로그래밍 > TIL(Today I Learned)' 카테고리의 다른 글
14강 매개변수의 전달기법(2) (0) | 2018.10.16 |
---|---|
13강 비지역 변수 참조 방법과 매개변수 전달 기법(1) (0) | 2018.10.16 |
11강 기억장소 할당 (0) | 2018.10.16 |
10강 영역과 수명(2) (0) | 2018.10.14 |
9강 영역과 수명(1) (0) | 2018.10.14 |