본문 바로가기

IL2CPP

[IL2CPP] Avoid Boxing Avoid BoxingIL2CPP OPTIMIZATION : Avoid Boxing Boxing은 코스트가 높은 연산이다. 이 글에서는 기존 C# 컴파일러는 특정한 상황에서 불필요한 Boxing이 수행되고, IL2CPP가 이를 어떻게 회피하는지를 보여준다.기존 C# 컴파일러의 방식interface HasSize { int CalculateSize(); } struct Tree : HasSize { private int years; public Tree(int age) { years = age; } public int CalculateSize() { return years*3; } }public static int TotalSize(params T[] things) where T : HasSize { va.. 더보기
[Unity] 왜 만들었는지 모를 IL2CPP IL2CPP는 유니티에서 발표한 AOT 컴파일러이다. 특이한점이 있다면, 인풋은 이미 빌드된 IL 코드 (DLL)이며, 아웃풋은 C++ 코드이다.그러니까 이미 빌드된 바이너리를 다시 뜯어서 컴파일 가능한 C++ 소스코드로 만들어낸다는건데, 어떻게보면 AOT가이나리 디컴파일로 생각할수도 있겠다. 유니티가 주장하는 IL2CPP의 장점- 퍼포먼스 : c++로 변환되서 네이티브 어셈블리로 실행되기 때문에 퍼포먼스 향상이 있다고 한다. 근데 처음부터 c++로 짜여진 코드도 아니고, IL을 c++ 코드로 변환한것이기때문에 최종 결과물인 c++ 코드에 .Net VM 호환성을 위한 코드들이 상당히 많이 들어간다. 어차피 Mono도 JIT이니, AOT니 전부 지원하는데 큰 효과가 있느지는 잘 모르겠다. 유니티측 벤치는 .. 더보기
[IL2CPP] Assembly.GetCallingAssembly 가 동작하지 않을 때 IL2CPP 환경에서 Assembly.GetCallingAssembly().GetTypes() 메소드가 기대한 것과 같이 동작하지 않을 때 어셈블리 문제알 수 없는 이유(버그?) 로 Assembly.GetCallingAssembly() 메소드는 Mono2x 일때와 IL2CPP 일 때 다른 값이 반환됩니다. 이를 해결하기 위해 해당 메소드 대신 typeof(FooType).Assembly 식의 접근법으로 어셈블리를 가져오는것으로 고칠 수 있습니다. (FooType은 찾고자 하는 어셈블리 안에 들어있는 타입이어야 합니다.) (또는) 코드 스트리핑 http://docs.unity3d.com/kr/current/Manual/iphone-playerSizeOptimization.html 스트립은 정적 코드 분석에.. 더보기