2017-02-09 8 views
6

स्विच स्टेटमेंट तुरंत मेमोरी में सही स्थान पर कैसे जाता है? नेस्टेड अगर-स्टेटमेंट के साथ, इसे प्रत्येक के साथ तुलना करना पड़ता है, लेकिन स्विच स्टेटमेंट के साथ यह सीधे सही मामले में जाता है। यह कैसे लागू किया जाता है?कैसे स्विच स्टेटमेंट काम करता है

+6

आपका संकलक शायद एक झंडा आप विधानसभा कोड यह उत्पन्न ... बिगाड़ने को दिखाने के लिए है: अक्सर कई बार यह का एक समूह के रूप में ही के बारे में है, तो-s –

+1

आपको क्या लगता है यह करता है? और 'if' नहीं करता है? कृपया एक संदर्भ प्रदान करें जहां मानक आपके दावे का समर्थन करता है। – Olaf

+0

@ डेविड कॉनॉली: क्या आप उत्तर स्वीकार कर सकते हैं? – chqrlie

उत्तर

15

मशीन कोड में switch कथन को संकलित करने के कई अलग-अलग तरीके हैं। यहाँ कुछ कर रहे हैं:

  • संकलक परीक्षण की एक श्रृंखला है, जो इतनी ही के बारे में लॉग (एन) परीक्षण के बीच एन संभव एक मूल्य के प्रेषण के लिए पर्याप्त हैं के रूप में अक्षम नहीं है उत्पादन कर सकते हैं मामलों।

  • कंपाइलर मूल्यों की एक तालिका का उत्पादन कर सकता है और पते को कूद सकता है, जो बदले में जेनेरिक लुकअप कोड (रैखिक या डिकोटॉमिक, bsearch() के समान) द्वारा उपयोग किया जाएगा और अंत में इसी स्थान पर कूद जाएगा।

  • यदि केस मान पर्याप्त घने होते हैं, तो संकलक कूद पते और कोड की एक तालिका उत्पन्न कर सकता है जो जांचता है कि स्विच मान सभी केस मानों को शामिल करने वाली सीमा के भीतर है और सीधे संबंधित पते पर कूदता है। यह शायद आपके विवरण के निकटतम कार्यान्वयन है: लेकिन स्विच स्टेटमेंट के साथ यह सीधे सही मामले पर जाता है।

लक्ष्य सीपीयू, संकलक सेटिंग्स के विशिष्ट क्षमताओं पर निर्भर करता है, और संख्या और मामले मानों का वितरण, संकलक ऊपर तरीकों में से एक या एक और, या उनमें से एक संयोजन, या यहाँ तक कि कुछ का उपयोग कर सकते अन्य तरीकों।

कंपाइलर डिजाइनर इन विकल्पों के लिए हेरिस्टिक को बेहतर बनाने की कोशिश में काफी प्रयास करते हैं। असेंबली आउटपुट को देखें या विभिन्न कोड पीढ़ी की संभावनाओं को देखने के लिए Godbolt's Compiler Explorer जैसे ऑनलाइन टूल का उपयोग करें।

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