[key events]
: 바인딩할때 고려사항들
- Objects(객체)의 생성과 제거 = 객체의 life time
- Binding(바인딩)의 생성과 제거 = 바인딩의 life time
- 잠깐 사용되지 않는 바인딩 비활성화와 재활성화
- 변수, 함수, 타입등과 같이 바인딩 사용하는 것들에 대한 참조 (생성과 제거, 비활성화 재활성화의 차이 인지하기)
(A a = new A(5) : name-to-object)
[바인딩 생명주기와 객체 생명 주기]
- 바인딩의 수명(Binding’s lifetime) : name과 object 간의 바인딩 생성부터 제거까지의 기간
- 객체의 수명(Object’s lifetime) : 객체의 생성부터 제거까지의 기간
# 이 두 생명주기는 무조건 동시 진행 되지 않는다.
# 일반적으로 객체 생명주기 ⊃ 바인딩 생명주기
ex) void func(Test* v) { # v의 바인딩 수명 |
[Garbage와 dangling reference]
- Garbage(가비지) : 객체가 바인딩보다 오래지속 될 때 발생
name이 객체를 point(binding)하고 있는 상황에서 해당 name에 다른 point(주소값)를 지정해주면, 해당 point가 가르키고 있던 객체(값)이 없어져, 사용되지 않는 객체(값)이 되는데 이를 가비지라고 한다. |
- Dangling reference(허상 포인터) : 객체보다 바인딩이 오래 지속 될 때 발생
(name에서 객체를 향한 바인딩은 남아있는데 객체 값이 없어져 버린 상태)
[객체 생명주기의 분류]
: 일반적으로, Object’s lifetime은 객체 공간 관리를 위한 3가지 메모리 할당 방법중 하나와 일치한다.
- 정적 객체(Static object) : 프로그램 실행되는 동안 유지되는 가상 주소값이 주어짐
- 스택 객체(Stack object) : LIFO, 재귀를 위한 함수 공간
- 힙 객체(Heap object) : 임의 시점에서 할당(사용자 재량), 연결 데이터 구조와 같은 동적 할당, 좋고비싼 메모리 관리 알고리즘 필요.
- Objects life time - Binding life time - Binding 비활성, 활성 - 바인딩 사용하는 것들에 대한 참조 : 가비지, 허수 포인터, 다른 함수내 진입시 기존 바인딩 상태(여기선 안다룸)등 관련 - 바인딩의 생명 주기 : 바인딩 생성 ~ 제거 - 객체의 생명 주기 : 객체 생성 ~ 제거 <특징> - 둘의 생명주기 무조건 동시발생 X - 일반적으로 객체 생명주기 ⊃ 바인딩 생명 주기 (반대인 경우도 존재 가능) - 가비지 : 객체가 바인딩보다 오래지속될때, 더이상 사용되지 않는 객체 - 허상 포인터 : 바인딩은 있는데 바인딩이 가르키고 있는 객체값이 없어져버린 상태 - 객체 생명주기 분류 : 정적 객체 / 스택 객체 / 힙 객체 (다음 글에서 다룸) |
'[프로그래밍 언어론]' 카테고리의 다른 글
프로그래밍 언어론 3-2-2강. 메모리할당 - 스택기반 할당(Stack-based allocation) (0) | 2019.10.26 |
---|---|
프로그래밍 언어론 3-2-1강. 메모리 관리 - 정적 할당(Static Allocation) (0) | 2019.10.26 |
프로그래밍 언어론 3-1강. Binding Time(바인딩 타임) (0) | 2019.10.26 |
프로그래밍 언어론 3강. 추상(Abstraction) (0) | 2019.10.26 |
프로그래밍 언어론 1-6강. 컴파일 과정 Overview (0) | 2019.10.14 |