과거에는 정적할당의 개념밖에 없어서 재귀 사용일 불가능했다. (변수등의 위치가 지정된 상태)
[스택기반 할당]
: 재귀(Recursion) 사용 가능
: Subroutine 들이 스택에 그들만의 frame 형태로 저장
[프레임의 구성]
- Arguments to called routines : 호출된 subroutine에 들어온 인자값들
- Temporaries : 복잡한 계산중 나오는 임시 값들
- Local variables : 지역변수
- Miscellaneous bookkeeping : 서브 루틴의 반송 주소, 이 subroutine을 요청자의 스택 프레임에 대한 참조값들
(bookkeeping information 통해 이전 프레임으로 복귀한다(재귀))
[스택의 유지]
: 이러한 스택은 시퀀스 호출을 통해 유지된다.
- 시퀀스 호출 : caller에 의해 실행되는 호출 직전(프롤로그)과 호출 이후(에필로그)에 실행되는 코드
(프롤로그와 에필로그는 {, } 형태로 고급수준에서 보이고, 어셈블리어에서 해당 문자열에 해당되는 명령이 존재)
[스택내 frame의 위치]
: 컴파일 시점에서 스택내에 subroutine(frame)들 위치를 예측할 수 없다.
: 하지만, 각 프레임내부의 객체(지역변수등)들의 위치는 offset간격으로 정적 결정되기때문에 예측할 수 있다.
[지역변수의 할당]
: 지역변수들은 재귀가 아니여도 스택기반 할당된다.
=> 정적할당되면 컴파일 시점에 지역변수등들이 지정되는데 쓸데없이 공간 차지하게된다.
=> 모든 subroutine들 동시실행되는거아니니 스택기반 할당해서 생성, 삭제해서 이용
=> 이 두가지 이유로, 스택기반할당하면 필요할때만 스택에 할당되므로 메모리 공간 효율성에 이득이다.
'[프로그래밍 언어론]' 카테고리의 다른 글
프로그래밍 언어론 3-2-4강. 쓰레기 수집(Garbage Collection) (0) | 2019.10.26 |
---|---|
프로그래밍 언어론 3-2-3강. 메모리할당- 힙기반 할당(Heap-Based Allocation) (0) | 2019.10.26 |
프로그래밍 언어론 3-2-1강. 메모리 관리 - 정적 할당(Static Allocation) (0) | 2019.10.26 |
프로그래밍 언어론 3-2강. 객체 수명과 메모리 관리 (0) | 2019.10.26 |
프로그래밍 언어론 3-1강. Binding Time(바인딩 타임) (0) | 2019.10.26 |