게임엔진/유니티

IL2CPP, MONO, AOT, JIT 여러 줄 정리

tsyang 2022. 12. 11. 23:38

[유니티 TIPS]  알고 있으면 쓸데 있는 IL2CPP, Mono, AOT, JIT 개념 파헤치기

 

1. 유니티 엔진 내부는 C++로 짜여있다. 유저 코드 부분만 C#으로 짜여있다. 따라서 유저 코드 부분에서만 C#사용으로 인해 속도가 느리다.

 

2. IL2CPP로 빌드하면 유저가 쓴 코드도 CPP로 변환된다.

 

3. C#을 컴파일하면 IL코드가 생성되고, MONO는 IL코드가 다시 여러 플랫폼에서 돌아갈 수 있게 해준다.

 

4. Mono는 IL코드를 그때그때 컴파일한다. 즉 JIT방식이다.

 

5. JIT방식은 인터프리터보다는 빠르다. JIT은 인터프리터와 달리 중간 처리된 코드(IL코드)를 컴파일 하기 때문

 

6. IL2CPP역시 Mono같은 역할을 수행한다. IL코드를 여러 플랫폼에서 돌아갈 수 있게 해주는 것.

 

7. IL2CPP는 AOT방식이다. 즉, 미리 모든 코드를 컴파일해둔다. 따라서 성능은 JIT보다 좋지만 빌드가 오래 걸린다.

 

8. 유니티는 에디터에서는 Mono를 사용한다. 빌드를 할 때는 IL2CPP를 사용한다면 생산성과 성능을 잡을 수 있다.

 

9. C# 코드를 CPP로 변환하는 과정에서 문제가 몇 개 있는데 대표적인 게 Generic Sharing이다. 

 

10. 일반적으로 제네릭을 사용하면 사용한 타입별로 코드를 다 생성하지만, 레퍼런스 타입에 한하여 하나의 공유 코드를 사용하도록 할 수 있는데 이것이 Generic Sharing이다.

 

11. JIT은 Generic Sharing이 있어도 그때그때 코드를 만들 수 있는 반면에, AOT방식으로 이걸 하려면 모든 코드를 생성해야 해서 코드 사이즈가 확 늘어난다. IL2CPP 변환 과정을 오래 걸리게 하는 주범.

 

 

'게임엔진 > 유니티' 카테고리의 다른 글

(토막상식) NativeContainer  (1) 2023.05.28
(토막상식) 유니티 메모리  (0) 2023.05.21
예약된(?) 폴더 이름과 Application의 Path들  (1) 2022.09.25
VCS - Plastic SCM  (1) 2022.08.14
Enter Play Mode Settings  (0) 2022.07.31