Saya akan menjelaskan mengompilasi kode IL ke dalam instruksi CPU asli melalui contoh di bawah ini.
public class Example
{
static void Main()
{
Console.WriteLine("Hey IL!!!");
}
}
Terutama CLR mengetahui setiap detail tentang jenis dan metode apa yang dipanggil dari jenis itu karena metadata.
Ketika CLR mulai mengeksekusi IL ke dalam instruksi CPU asli, CLR mengalokasikan struktur data internal untuk setiap jenis yang dirujuk oleh kode Utama.
Dalam kasus kami, kami hanya memiliki satu jenis Konsol, sehingga CLR akan mengalokasikan satu struktur data internal. Melalui struktur internal itu, kami akan mengelola akses ke tipe yang direferensikan.
Di dalam struktur data itu, CLR memiliki entri tentang semua metode yang ditentukan oleh tipe itu. Setiap entri menyimpan alamat di mana implementasi metode dapat ditemukan.
Saat menginisialisasi struktur ini, CLR menyetel setiap entri dalam FUNCTION yang tidak terdokumentasi yang terdapat di dalam CLR itu sendiri. Dan seperti yang bisa Anda tebak, FUNCTION ini yang kami sebut JIT Compiler.
Secara keseluruhan, Anda dapat mempertimbangkan JIT Compiler sebagai fungsi CLR, yang mengompilasi IL ke dalam instruksi CPU asli. Izinkan saya menunjukkan kepada Anda secara detail bagaimana proses ini akan terjadi dalam contoh kita.
1. Saat Main membuat panggilan pertamanya ke WriteLine, fungsi JITCompiler dipanggil.
2. Fungsi Compiler JIT mengetahui metode apa yang dipanggil dan tipe apa yang mendefinisikan metode ini.
3. Kemudian Jit Compiler mencari assembly di mana mendefinisikan tipe itu dan mendapatkan kode IL untuk metode yang ditentukan oleh tipe itu dalam kasus kode IL dari metode WriteLine.
4. Compiler JIT mengalokasikan blok memori DYNAMIC , setelah itu JIT memverifikasi dan mengkompilasi kode IL ke dalam kode CPU asli dan menyimpan kode CPU tersebut di blok memori tersebut.
5. Kemudian compiler JIT kembali ke entri struktur data internal, dan mengganti alamat (yang terutama mengacu pada implementasi kode IL dari WriteLine) dengan alamat blok memori baru yang dibuat secara dinamis, yang berisi instruksi CPU asli dari WriteLine.
6. Terakhir, fungsi JIT Compiler melompat ke kode di blok memori dan mengeksekusi kode asli dari metode garis tulis.
7. Setelah eksekusi WriteLine, kode kembali ke Kode Utama yang melanjutkan eksekusi seperti biasa.