프로그래밍/TIL(Today I Learned)

12강 동적 기억장소 할당

가라멜 2018. 10. 16. 17:56
반응형

1. 동적 기억장소 할당

- 동적 기억장소 할당 기법 

- 프로그램 실행 중에 기억장소를 할당하는 기법

- 인터프리터 언어에 사용 - APL, LISP, Prolog등..

- 블록 기반 언어

- Algol60의 영향을 크게 받아 설계된 프로그래밍 언어

- 변수들의 영역을 제한하고, 프로그램을 적당한 단위 프로그램으로 나누어 구성할 수 있도록 블록 개념을 도입한 언어

- 블록 기반 언어에서의 단위 프로그램

- 블록 : 특정 블록의 실행 차례가 되었을 때 활성화됨, 지역 선언문을 가지며 새로운 실행 환경을 정의하기 위한 단위

- 부프로그램 : 호출문에 의하여 호출되었을 때 활성화 됨, 변수 영역이 블록에서의 변수 영역과 동일한 규칙을 따름


2. 시점에 따른 구분

1) 활성화 레코드의 크기가 정적으로 결정되는 경우

- 지역 변수들이 필요로 하는 기억장소 용량이 번역시간에 결정됨

- 지역 변수들의 생성은 단위 프로그램이 활성화되는 시점에 결정됨

- 준정적 변수(semi-static variable)

- 활성화 레코드의 크기는 정적 바인딩, 기억장소 할당은 동적 바인딩

- 재귀 호출을 가능하게 함

- 스택 기반의 기억장소 할당을 수행할 수 있어 효율적인 주기억장소 활용 가능

- 전형적인 활성화 레코드 구조

- 반환 주소 : 호출한 단위 활성화로 되돌아갈 주소

    : 구성 : 호출자의 코드부에 대한 포인터, 호출 다음 명령어에 대한 코드부에서의 차감거리

- 동적 링크 : 호출한 활성화 레코드를 가리키는 주소값을 저장하는 포인터

    : 동적 체인 : 현재 활성화된 활성화 레코드부터 동적 링크를 추적한 연결

- 나머지 활성화 레코드 정보

- 스택 기반 동적 기억장소 할당

-새로운 활성화가 발생되면 주 기억장소에 새로 할당

- 한 활성화의 실행이 끝나면 해당 레코들르 회수

- 호출 싱행 순서 : 활성화 레코드가 발생되었다가 회수되는 순서

2) 활성화 레코드의 크기가 활성화 시점에 결정되는 경우

- 준동적 변수(semi-dynamic variable)

- 단위 프로그램이 활성화되는 시점에 지역 변수들이 필요로 하는 기억장소 용량이 결정되고 생성

- 지역 변수들의 차감 거리가 번역시간에 상수값으로 확정되지 못하여 주소에 대한 최종 확정을 실행 시간까지 늦추어야 함

- 활성화 레코드의 크기가 동적 바인딩 되지만, 한 번 바인딩 되면 활성화된 프로그램이 종결될 때까지 크기가 변할 수 없음

- 준동적 변수 할당 순서

(1) 준정적 변수에 필요한 기억장소와 준동적 변수의 명세표에 대한 기억장소를 할당함

(2) 중동적 변수에 대한 기억장소의 실제 크기가 계산되면 그 때 계산된 기억장소만큼 활성화 레코드를 확장시켜 할당함 

(3) 그 주소를 먼저 할당한 명세표의 포인터에 바인딩함

3) 활성화 레코드의 크기가 동적으로 변하는 경우

- 동적 변수(dynamic variable)

- 단위 프로그램의 실행 중에 새로운 자료값이 생성되고 회수되어 활성화 레코드의 크기가 동적으로 변함

- 프로그래머가 실행 중에 기억장소의 크기를 변화시키는 자료값을 다룰 수 있음

- 힙 기억장소 할당

- 동적 변수는 활성화 레코드와 함께 회수되지 않고 계속 더 유지될 수 있기 때문에, 스택에 할당되는 활성화 레코드에 할당이 불가능

- 힙 기억장소에 할당한 후 포인터 변수가 이를 가리키도록 바인딩






반응형