while (condition) {
...
}
कार्यप्रवाह:
- हालत की जांच;
- अगर झूठ है, तो लूप के बाहर कूदो;
- एक चलना;
- ऊपर से कूदो।
if (condition) do {
...
} while (condition);
कार्यप्रवाह:
- हालत की जांच;
- अगर गलत है, तो लूप से परे कूदो;
- एक चलना;
- हालत की जांच;
- यदि सही है, तो चरण 3 पर जाएं।
इन दोनों की तुलना करते हुए आप आसानी से देख सकते हैं कि उत्तरार्द्ध कोई भी कूद नहीं सकता है, बशर्ते कि लूप के माध्यम से एक कदम हो, और आमतौर पर कूद की संख्या पुनरावृत्तियों की संख्या से एक कम होगी। पूर्व की स्थिति की जांच करने के लिए वापस कूदना होगा, केवल स्थिति के गलत होने पर लूप से बाहर कूदने के लिए।
आधुनिक पाइपलाइन वाले सीपीयू आर्किटेक्चर पर कूदना काफी महंगा हो सकता है: चूंकि सीपीयू कूदने से पहले चेक का निष्पादन पूरा कर रहा है, इसलिए उस कूद से परे निर्देश पहले से ही पाइप लाइन के बीच में हैं। यदि शाखा भविष्यवाणी विफल हो जाती है, तो यह सब प्रसंस्करण त्याग दिया जाना चाहिए। आगे निष्पादन में देरी हो रही है, जबकि पाइपलाइन को फिर से बनाया जा रहा है।
उल्लिखित शाखा भविष्यवाणी को समझाते हुए : प्रत्येक प्रकार की सशर्त कूद के लिए सीपीयू में दो निर्देश होते हैं, जिनमें से प्रत्येक परिणाम पर एक शर्त भी शामिल है। उदाहरण के लिए, आप एक निर्देश डालेंगे " लूप के अंत में शून्य न होने पर, शून्य पर दांव लगाते हुए" कूदें क्योंकि पिछले एक को छोड़कर सभी पुनरावृत्तियों पर कूदना होगा। इस तरह से सीपीयू जम्प टारगेट का पालन करने के बजाय जंप टारगेट का पालन करते हुए निर्देशों के साथ अपनी पाइपलाइन को पंप करना शुरू कर देता है।
महत्वपूर्ण लेख
कृपया इसे स्रोत कोड स्तर पर अनुकूलित करने के तरीके के रूप में न लें। यह पूरी तरह से गुमराह किया जाएगा, जैसा कि पहले से ही आपके सवाल से स्पष्ट है, पहले रूप से दूसरे में परिवर्तन जेआईटी संकलक रूटीन के मामले में, पूरी तरह से अपने दम पर करता है।