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

11강 기억장소 할당

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

1. 정적 및 동적 기억장소 할당

- 정적 기억장소 할당의 경우

- 배열에 할당된 기억장소의 크기나 위치 등이 정적(번역시간에 확정)으로 결정되는 경우

>> 배열에 대한 접근 코드를 더욱 효율적으로 작성 가능

- 정적 기억장소 할당의 기본 조건

1) 모든 배열은 확정된 정 크기로 선언되어야 함

2) 부프로그램은 재귀호출이 허용되지 않아야 함

- 프로그램을 실행하는 동안 어떤 부프로그램에 대해서도 그 부프로그램이 요구하는 크기의 기억장소만 필요

- 실행 시간에 하나의 주 프로그램과 관련된 부 프로그램이 요구하는 기억장소의 크기는 각 단위 프로그램이 필요로 하는 기억장소의 총합을 넘지 않음

- 동적 기억장소 할당의 경우

- 인터프리터 언어의 경우 동적 기억장소 할당이 필요

- 인터프리터 언어로 프로그래밍할 경우 대부분의 프로그램은 매우 간결하게 처리되지만 컴파일러 언어보다 많은 실행시간을 요구

- 정적과 동적 기억장소 할당이 합쳐진 예

- PL/1

정적 기억장소 할당과 동적 기억장소 할당의 가장 좋은 특징을 합친 기법 제공


2. 단위 프로그램

- 프로그램의 구성 : 단위 프로그램 / 지역 변수

- 단위 프로그램의 활성화

- 활성화 상태 : 한 단위 프로그램의 실행 시작부터 종료까지의 시간

- 단위 활성화 : 실행 시간에 한 단위 프로그램이 표현된 상태

- 단위 활성화의 구성

- 코드부 : 고정된 크기, 내용이 프로그램의 실행 동안 변하지 않음

- 활성화 레코드 : 프로그램 실행에 필요한 모든 정보를 가지고 있음, 프로그램 실행에 따라 변함

- 단위 활성화의 참조 환경

- 지역 변수 : 단위 프로그램에서 선언된 지역변수로 자신의 활성화 레코드에 할당 되어 있음

- 비지역 변수 : 해당 단위 프로그램에서 사용 가능한 비지역 변수로 다른 단위 프로그램의 활성화 레코드에 저장되어 있음

- 재귀호출

- 단위 프로그램이 재귀적으로 활성화됨

- 한 프로그램에 대한 새 활성화가 그 프로그램의 이전 활성화가 끝나기 전에 새로 발생함

- 하나의 코드부와 여러 개의 활성화 레코드 생성


3. 정적 기억장소 할당

- Fortran 77

- 구성 : 하나의 주 프로그램과 몇 개의 부 프로그램

- 각 단위 프로그램에서 지역 변수들에 필요한 기억장소의 총합은 컴파일 시간에 결정됨 > 실행시간에는 변하지 않음

- 활성화 레코드 : 실행 전에 할당하여 실행이 종료될 때까지 유지됨

- 변수의 수명 : 프로그램 실행시간 전체(정적 변수)

- 변수의 영역 : 변수가 선언된 단위 프로그램에 국한

- COMMON : 전역 변수를 선언함

- COMMON 변수는 시스템이 제공한 활성화 레코드에 속해 있다고 간주해도 무방

-차감거리(offset)

- 단위 프로그램을 컴파일 할 때 지역변수는 프로그램에서 발생한 순서대로 단위 활성화 레코드의 연속된 장소를 차지

- 각 지역변수에 대응하는 차감거리가 정적으로 한정됨

- 결국, 차감거리가 변수를 대표함

- 그러나 번역시간에는 활성화 레코드에 대한 기억장소 위치가 결정되지 않으므로, 변수에 대한 기억장소 위치가 확정되지 않음

- 정적 기억장소 할당

- 각 단위 프로그램에서 요구하는 기억장소의 크기는 실행시간 전에 확정

- 변수에 대한 기억장소 위치는 번역시간 마지막 단계인 프로그램 실행 전에 링크되어 적재할 때 확정되는 기법

- 장점 : 단순한여 매우 쉽게 구현 가능

- 단점 : 프로그램 언어에 대한 유연성이 적음, 재귀 호출을 허용하지 못함., 활성화되지 않을 수도 있는 활성화 레코드 역시 주기억 장소를 항상 차지함










반응형