*가비지 컬렉션 (GC)에 대한 생각 정리
1.C++에서는 메모리 구조가 콜스텍,힙, 레지스터 정적메모리 4가지로 구분된다.
하지만 C#으로오면서 콜스텍과 힙영역에만 저장된다.
2. 가비지 컬렉터(Garbage Collector)은 메모리가 부족할때 일어난다.
레퍼런스 카운팅으로 현재 힙 매모리에 있는 것중 가장 접근 하지않는(사용하지않는) 것부터 세대수를 매겨서
(1세대, 2세대,3세대....)
그 중 가장 낮은 세대부터 메모리에 여유가 생길떄 까지 해제한다(즉 지운다)
여기서 키워드 auto , static, extern, register(C언어만)
그리고 int,char, float 등 값타입은 스택에 저장된다
목록
int, float, double, char, struct, bool, enum
unsigned, byte, long, short
위에 aotumatic 변수들의 생명은 컴파일러에 의해서 결정된다. 즉 프로그래머가 신경쓰지 않아도 된다.
반대로 힙에저장되는 목록
class, object, string
3. 가비지 컬렉션에 의해 자동 해제가 아닌 수동으로 해제할떄는 변수에 null을 넣으면 된다.
cTestClass* TC = new cTestClass; <--생성
사용후..
TC = null <-- 이러면 자연히 세대수 가장 낮은곳으로 가게 되며 가장먼저 해제'대상'이된다. 해제 되는것이 아닌 해제대상이다.
그러므로 로딩을 할떄나 시네마틱 연출등등 플레이와 상관없는 행동을 할떄 System.GC.Collect();.을 이용하여 컬렉션 정리를 해주는것도 좋다.
* 참고로 GameObject.Find()은 그 객체의 인스터스를 리턴한다.
하지만 여기서 가비지 컬렉션 또한 프로그램이 구동되는 동안 메모리를 잡아먹는 즉 비용이 든다.
레퍼런스 카운팅을 조사하기 떄문이다.
그러므로 가볍게 변수를 가지고 있을 경우라면 struct에 다 하는것도 좋다.
ex) 이름.나이.HP.등등 간단한 수치 저장 = struct
기능을 구현 = class
그리고 유니티에서 하나의 씬에서 다음 신으로 넘어갈때 이전씬의 모든 변수들은 파괴된다. (그러니 저장하자)
참고 : http://unityindepth.tistory.com/12
'프로그래밍 > Unity 코드' 카테고리의 다른 글
Unity 3D 스크립트 라이프 사이클 플로우차트(Script Lifecycle Flowchart) (0) | 2016.03.21 |
---|---|
C#에서의 생성자 및 초기화 (0) | 2016.03.21 |
유니티 3D에서 물체 회전과 이동 방법중 하나. (0) | 2016.02.23 |
C# xml, json, txt, binary 타입 읽고 쓰기 (0) | 2016.02.05 |
System.Reflection , GetType, Getvalue, Setvaule (0) | 2016.02.05 |