मैं उदाहरण के माध्यम से मूल सीपीयू निर्देशों में आईएल कोड को संकलित करने का वर्णन करूंगा।
public class Example
{
static void Main()
{
Console.WriteLine("Hey IL!!!");
}
}
मुख्य रूप से सीएलआर प्रकार के बारे में प्रत्येक विवरण जानता है और उस प्रकार से किस विधि को बुलाया जा रहा है, यह मेटाडेटा के कारण है।
जब सीएलआर उस समय देशी सीपीयू अनुदेश में आईएल निष्पादित करना शुरू कर देता है, तो सीएलआर मेन के कोड द्वारा संदर्भित हर प्रकार के आंतरिक डेटा संरचनाओं को आवंटित करता है।
हमारे मामले में हमारे पास केवल एक ही प्रकार का कंसोल है, सीएलआर उस आंतरिक संरचना के माध्यम से एक आंतरिक डेटा संरचना आवंटित करेगा, हम संदर्भित प्रकारों तक पहुंच प्राप्त करेंगे
उस डेटा संरचना के अंदर सीएलआर में उस प्रकार से परिभाषित सभी विधियों के बारे में प्रविष्टियां होती हैं। प्रत्येक प्रविष्टि उस पते को रखती है जहाँ विधि का कार्यान्वयन पाया जा सकता है।
जब इस संरचना को आरम्भ करते समय CLR प्रत्येक अनिर्दिष्ट FUNCTION में CLR के अंदर ही प्रत्येक प्रविष्टि को सेट करता है। और जैसा कि आप अनुमान लगा सकते हैं कि यह FUNCTION जिसे हम JIT कंपाइलर कहते हैं।
कुल मिलाकर आप जेआईटी कंपाइलर को सीएलआर फ़ंक्शन के रूप में मान सकते हैं जो आईएल को देशी सीपीयू निर्देशों में संकलित करता है। मैं आपको विवरण में दिखाता हूं कि यह प्रक्रिया हमारे उदाहरण में कैसे होगी।
1.जब मेन के अपने पहले कॉल को राइटलाइन को JITCompiler फंक्शन कहते हैं।
2.JIT कंपाइलर फ़ंक्शन जानता है कि किस विधि को बुलाया जा रहा है और किस प्रकार इस पद्धति को परिभाषित करता है।
3. जब जेट कंपाइलर उस प्रकार को परिभाषित करता है, जो उस प्रकार को परिभाषित करता है और उस प्रकार से परिभाषित विधि के लिए आईएल कोड प्राप्त करता है, हमारे मामले में आईएल कोड ऑफ राइटलाइन विधि।
4.JIT संकलक डायनामिक मेमोरी ब्लॉक को आवंटित करता है, उसके बाद JIT सत्यापित करता है और IL कोड को मूल CPU कोड में संकलित करता है और उस मेमोरी ब्लॉक में CPU कोड सेव करता है।
5. जब JIT संकलक आंतरिक डेटा संरचना प्रविष्टि में वापस जाता है और पते को बदल देता है (जो मुख्य रूप से WriteLine के IL कोड कार्यान्वयन का संदर्भ देता है) पते के साथ नए गतिशील रूप से बनाए गए मेमोरी ब्लॉक जिसमें WriteLine के मूल CPU निर्देश होते हैं।
6. आमतौर पर, जेआईटी कंपाइलर फ़ंक्शन मेमोरी ब्लॉक में कोड के लिए कूदता है। यह कोड राइटलाइन विधि का कार्यान्वयन है।
7. लाइकलाइन के लागू होने के बाद, कोड Mains'code पर लौटता है जो निष्पादन को सामान्य रूप से जारी रखता है।