2013-06-10 5 views
5

मैं जॉन स्कीट द्वारा गहराई में सी # पढ़ रहा हूं। तीसरे अध्याय से हवाला देते हुए:जेआईटी कंपाइलर मूल्य प्रकारों का इलाज कैसे करता है?

JIT एक विशेष रूप से चतुर तरीका है कि कई स्थितियों में मुक्केबाजी और unboxing को खत्म करने का प्रबंधन करता है में मूल्य प्रकार का इलाज कर सकते हैं। मामलों में, यह गति और स्मृति खपत दोनों के संदर्भ में प्रदर्शन में एक बड़ा अंतर डाल सकता है।

क्या कोई यह बता सकता है कि इसका अर्थ क्या है, अधिमानतः एक उदाहरण के साथ?

+1

'जॉन' नहीं 'जॉन' :) –

+0

* बॉक्सिंग * एक मान प्रकार को 'ऑब्जेक्ट' के रूप में सहेजने की प्रक्रिया का वर्णन करता है, उदाहरण के लिए: 'ऑब्जेक्ट ओ = 13;', जबकि * अनबॉक्सिंग * पुनर्प्राप्ति की प्रक्रिया का वर्णन करता है वस्तु से मूल्य: 'int तेरह = (int) ओ;'। क्या आप यही जानना चाहते थे? – Nolonar

+1

नहीं। मैं उपर्युक्त कथन का सटीक अर्थ चाहता हूं "जेआईटी मूल्य प्रकारों का इलाज विशेष रूप से चालाक तरीके से कर सकता है जो कई स्थितियों में मुक्केबाजी और अनबॉक्सिंग को खत्म करने का प्रबंधन करता है। कुछ मामलों में, यह दोनों गति के संदर्भ में प्रदर्शन में एक बड़ा अंतर डाल सकता है और स्मृति खपत। " – amitabha

उत्तर

1

चलिए एक उदाहरण के रूप में List<int> लेते हैं। यही कारण है कि एक वास्तविक int[] के द्वारा समर्थित है, और JIT कोड विशेष रूप से int प्रकार तर्क के लिए, ताकि एक TList<T> भीतर का उपयोग कर के रूप में यदि कोड सिर्फ लिखा गया था पूर्णांकों के लिए किसी भी अनुकूलन मिलना चाहिए किसी भी कोड JIT-संकलित कर देगा।

जावा के जेनरिक, जहां केवल मान्य प्रकार तर्क वर्ग प्रकार के होते हैं के साथ इस की तुलना करें - तो भले ही यह वैध है लिखने के लिए:

// Java code! 
List<Integer> integers = new ArrayList<Integer>(); 
integers.add(10); 
int x = integers.get(0); // x = 10 

कि एक बॉक्सिंग और पृष्ठभूमि में unboxing कार्रवाई निष्पादित करता है। समकक्ष सी # कोड में कोई मुक्केबाजी शामिल नहीं होगी।

+0

बहुत से धन्यवाद जॉन। लेकिन जॉन आप नीचे उल्लिखित रेखा को अधिक स्पष्ट रूप से exzlain कर सकते हैं। रेखा है: ताकि सूची के भीतर टी का उपयोग करने वाला कोई भी कोड किसी भी अनुकूलन को प्राप्त कर सके जैसे कि कोड केवल पूर्णांक के लिए लिखा गया हो। – amitabha

0

मुझे लगता है कि जॉन का मानना ​​है कि इनमें से कई प्रकारों को इसके परिभाषित प्रकार की वस्तुओं के रूप में नहीं माना जाता है। उदाहरण के लिए; एक int को एक संरचना के रूप में नहीं माना जाना चाहिए और सीधे रजिस्टरों में संभाला जा सकता है। दो पूर्णांक जोड़ना ओवरलोडेड ऑपरेटर कॉल द्वारा नियंत्रित नहीं किया जाता है लेकिन सीपीयू द्वारा सीधे किया जाता है।

संबंधित मुद्दे