Unity IL2CPP: Methodenaufrufe im generierten C++-Code

Unity hat am 3. Juni 2015 den vierten Teil seiner technischen IL2CPP-Serie veröffentlicht. Der Beitrag untersucht, wie Methodenaufrufe in generiertem C++-Code umgesetzt werden und welchen Aufwand die verschiedenen Varianten verursachen.

Sechs Aufrufarten im generierten Code

Für das Beispiel verwendet Unity die Version 5.0.1p4, ein Projekt für WebGL und die Option Development Player. Verglichen werden direkte Aufrufe von Instanz- und statischen Methoden, Aufrufe über einen zur Compilezeit bekannten Delegate, virtuelle Methoden, Interfaces, zur Laufzeit erzeugte Delegates und Reflection. Die Untersuchung zeigt jeweils den C++-Code, den il2cpp.exe aus dem verwalteten C#-Code erzeugt.

Direkte Aufrufe benötigen den wenigsten Zusatzcode

Bei einem direkten Aufruf ruft der erzeugte Code eine freie C++-Funktion auf. Ein statischer Methodenaufruf benötigt dabei keine Objektinstanz. Delegates und Interfaces führen zusätzliche Aufrufe und Tabellenzugriffe ein. Ein zur Laufzeit erzeugtes Delegate muss außerdem eingerichtet werden, bevor die Zielmethode erreicht wird. Reflection verursacht im Beispiel den größten Aufwand, weil zunächst Metadaten gesucht und anschließend Argumente für den Aufruf verpackt werden.

Die Ergebnisse sind als technische Momentaufnahme von Unity 5.0.1p4 gedacht. Unity weist darauf hin, dass sich der erzeugte Code in späteren Versionen ändern kann. Die Serie baut auf dem Beitrag zum generierten C++-Code und der späteren Anleitung zum Debugging von IL2CPP-Code auf. Für die Optimierung eines Projekts empfiehlt Unity weiterhin Messungen mit Profiling-Werkzeugen statt Schlussfolgerungen allein aus dem generierten Quelltext.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein