Релевантные страницы: - рисунок-Схема, как работает [IL2CPP](https://docs.unity3d.com/560/Documentation/Manual/IL2CPP-HowItWorks.html) **IL2CPP** (Intermediate Language To C++) - это фреймфорк, разработанный самим Unity как альтернатива Mono.  **IL2CPP** компилирует [[IL|CIL-код]] в C++ код, затем компилирует C++ в исполняемый файл с машинным кодом (**native binary file**). Процесс компиляции C++ в **native binary file** для разных ОС происходит по-разному. Для Android Unity использует NDK, а для iOS используется Xcode. В случае с iOS, Unity создает проект на С++ под Xcode, который мы вручную должны собрать с помощью интерфейса Xcode. **IL2CPP** использует AOT-компилятор, а [[Mono в Unity|Mono]] использует JIT-компилятор. [AOT-компилятор](https://ru.wikipedia.org/wiki/AOT-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F) (Ahead-of-Time) - компилирует весь код заранее во время сборки проекта под конкретную ОС и архитектуру процессора. **Il2CPP** намного дольше собирает билд в сравнении с **Mono**. ### Важные нюансы В `.NET` и `Mono` каждый поток использует свою локальную кучу, поэтому при аллокации памяти и сборке мусора приостанавливается только этот поток. В `IL2CPP` все потоки делят общую кучу, поэтому при аллокации памяти может потребоваться приостановить все потоки для синхронизации и сборки мусора. Это делает IL2CPP менее эффективным в многопоточных сценариях по сравнению с .NET.