Unity hat am 26. Juli 2016 einen Beitrag zu einer Optimierung im IL2CPP-AOT-Compiler veröffentlicht. Im Mittelpunkt steht die Devirtualisierung, bei der ein virtueller Methodenaufruf in einen direkten Aufruf umgewandelt wird, wenn der Compiler das Ziel sicher bestimmen kann.
IL2CPP übersetzt C#- beziehungsweise .NET-Code in C++ und erzeugt daraus nativen Maschinencode. Virtuelle Aufrufe benötigen normalerweise eine Laufzeitauflösung. Bei einem direkten Aufruf entfällt dieser zusätzliche Weg. Unity beschreibt den Effekt als kleine Optimierung, die vor allem in häufig ausgeführtem Spielcode relevant werden kann.
Vorsichtige Analyse des generierten C++-Codes
Die Optimierung greift nicht pauschal. IL2CPP muss sicher ausschließen können, dass eine abgeleitete Klasse den Aufruf verändert. Fehlt diese Gewissheit, bleibt der generierte Code beim virtuellen Aufruf. Erst zusätzliche Informationen über Typen und Vererbung erlauben den direkten Methodenaufruf.
Unity verweist Entwickler deshalb auf den generierten C++-Code und die Stellen, an denen IL2CPP bereits optimiert. Der Beitrag ergänzt eine Serie technischer Artikel, zu der auch die frühere IL2CPP-Erklärung zur testgetriebenen Entwicklung gehört.
