게임엔진/Unity 5

클래스와 구조체 차이

클래스와 구조체 가장 큰 차이 1. 클래스는 힙 메모리에 할당된다 vs 구조체는 스택 메모리에 할당된다.=> 클래스는 GC관리 대상 / 구조체는 GC관리 대상이 아니다.2. 클래스는 상속이된다. vs 구조체는 상속이 안된다. 잘못된 사실 1. 구조체에 선언된 필드의 총 사이즈가 16이 넘으면 힙에 할당된다는데 이는 잘못된 사실이다. 2. 구조체에 클래스 타입을 필드로 가진다고 해서 "구조체" 자체가 힙에 할당되는 것은 아니다. 단지, 클래스 타입의 필드는 그 인스턴스만 힙에 있고 그 인스턴스를 가리키는 포인터 값은 구조체 내에 존재하며 따라서 스택에 구조체가 유지된다는 사실에는 변함이 없다. 언제 클래스? 언제 구조체? Choosing Between Class and Struct - Framework D..

게임엔진/Unity 2023.07.03

List를 사용할 때 Reserve해야하는 이유

List는 Size가 가변적인 Collection이다. List에 데이터를 Add할 때 내부코드는 아래와 같다. => Add 를 호출하면 현재 배열의 사이즈를 비교하고 if (this._size == this._items.Length) 가득찼다고 판단하면 EnsureCapacity 메서드를 호출한다.=> EnsureCapacity를 보니, Length가 0이 아니면 무조건 Length의 2배를 Capacity Property에 할당해버림 => 일단 new T[value]로 destinationArray라는 새로운 배열 객체를 생성하는데, EnsureCapacity로부터 받은 원래 사이즈의 두배 만큼의 메모리공간을 할당함. => 그 다음 destinationArray에 원래 데이터들을 Copy한다음의 기존..

게임엔진/Unity 2023.07.03

MONO / IL2CPP / AOT/ JIT

MONO C#은 “Mono C# 컴파일러”에 의해서 IL코드(CPU와 OS에 독립적인 기계어 코드)로 변환된다. Assembly-CSharp.dll 를 확인하면 IL코드를 볼 수 있다. 이제 Unity에서 Mono로 빌드를 하게되면 IL코드는 Mono Framework상에서 돌면서 다시 Assembly(Binary)로 변환한다. 그런데, 이 Mono는 런타임 중에 그때그때 필요할 때 마다 코드를 한줄 씩 읽으면서 Assembly언어로 변환한다. 이러한 과정을 JIT컴파일링(Just In Time)이라고 한다.     첨언 : 추가 상식1> C#은 .Net Framework 위에서 동작하는데 이는 Windows 프로그램을 구동시키자는 취지로 개발되었기 때문에 Windows 환경에 제한되어 있음. 따라서 오..

게임엔진/Unity 2022.05.22