डेल्फी के नेट कोड जनरेटर, सीधे स्मृति में बाईटकोड के रूप में आईएल का उत्सर्जन करता है ज्यादा 86 कोड पीढ़ी की तरह यह है कि उचित हेडर के साथ आदि, कोड जनरेटर सीधे बाइट्स, अपवाद टेबल आदि का उत्सर्जन करता है, इनकोडिंग आईएल प्रारूप करने के लिए इसी । यह एपीआई के साथ ऐसा नहीं करता है, बल्कि पुराने तरीके से: कोड को एक बार में एक बाइट लिखें।
बाद में, डेल्फी के अंतर्निहित लिंकर मेटाडाटा उत्पन्न करने के लिए IMetaDataEmit
आदि के साथ काम करता है, और IMetaDataEmit::SetRVA
मेटाडाटा जहां कोड निष्पादन में स्थित किया जा रहा है यह बताने के लिए। मेटाडाटा को IMetaDataEmit::SaveToMemory
के साथ कॉपी किया गया है और उसके बाद पीई में कॉपी किया गया है कि लिंकर का निर्माण हो रहा है, सीएलआर हेडर मेटाडेटा प्रारंभ को इंगित करने के लिए संगत रूप से पैच किया गया है।
यह बहुत सी कोड है, इसमें से कुछ बहुत ही स्पष्ट हैं, क्योंकि इसमें से अधिकांश डेल्फी के मौजूदा x86 लिंकर के माध्यम से थ्रेड किया गया है, जो शाखा ऑप्टिमाइज़ेशन और अप्रयुक्त कोड (स्मार्ट लिंकिंग) को समाप्त करने जैसी चीजें करता है जो सख्ती से बोलना आम तौर पर नहीं है .NET के लिए आवश्यक है।
अगर हम इसे फिर से करना चाहते हैं, तो हम मेटाडेटा बनाने के लिए .NET एपीआई से बहुत अच्छी तरह से बच सकते हैं, और पूरी चीज सीधे spec से उत्पन्न कर सकते हैं। एपीआई ऑप्टिमाइज़ेशन के लिए एक ब्लैक बॉक्स बन गया, और संकलन समय की पर्याप्त मात्रा में जोड़ा गया।
स्रोत
2010-07-12 20:20:45
धन्यवाद, बैरी। –