Unity Runtime

최대 1 분 소요

유니티의 멀티플랫폼 아키텍쳐?

메모리영역

Native영역(렌더링, 피직스 등등)

  • 얘는 성능에 많은 영향을 미치므로 VM없이 동작.

Managed영역(C#스크립트)

  • 이 녀석이 mono가 관리함.
  • 여기서 Native영역의 메모리를 참조하면 Wrapper객체가 생성되는 비효율적인 구조

JIT

빌드타임

  • C#스크립트 -> IL코드변환

런타임

  • IL코드를 Mono에서 해석후 동작할 플랫폼에 따라 기계어로 번역
  • 유니티 구버전들은 런타임 컴파일이 최적화가 잘 안되어서 성능상 이슈가 많았음. 또한 IL코드가 보안이 너무 취약해서 각종 디컴파일툴로 손쉽게 C#스크립트로 변환되어 조작할 수도 있었음……
  • 유니티에선 Mono버전업은 계속 진행하는데 문제는 GC.
    • 최신 Mono는 Sgen GC 사용, 그러나 어떠한 이유인지 몰라도 계속 Boehm GC를 사용.
    • BoehmGC는 세대별 가비지 컬렉터가 아닌 마크앤스윕방식이다. Sweep시에 프로그램이 멈출 확률이 높은편..
  • 2018.3부터는 Roslyn사용. 최신 닷넷프레임워크를 지원함.

AOT

빌드타임

  • C#스크립트 -> IL코드변환 -> CPP코드변환
  • 빌드시간이 오래걸림..

런타임

  • 대부분의 기기는 CPP컴파일이 가능하므로 VM없이 바로 기계어로 동작.
  • Vm없이 동작해서 최적화되었다고 생각하면 오산….
    • 버그가 많음
    • 이것땜에 C# 스크립팅시 제약이 있음.
    • 이 Extension은 필수
      • AOT컴파일 시 문제되는 코드를 잡아준다.

태그:

카테고리:

업데이트: