सार स्पष्टीकरण
C और C ++ दोनों में एक अमूर्त मशीन की अवधारणा है । जब कोड कुछ चर के मूल्य का उपयोग करता है, तो अमूर्त मशीन का कहना है कि कार्यान्वयन को उस चर के मूल्य का उपयोग करना होगा। statement_A; statement_B; statement_C;निर्दिष्ट क्रम में फ़ॉर्म के कोड को निष्पादित किया जाना है। उन तीनों कथनों के लिए सामान्य अभिव्यक्तियाँ प्रत्येक बार होने वाली घटनाओं की पुनः गणना की जानी चाहिए।
अमूर्त मशीनों के अनुसार statement_A; statement_B; statement_C;, बयानों के अनुक्रम को देखते हुए , कार्यान्वयन को पहले statement_Aअपनी संपूर्णता में प्रदर्शन करना चाहिए , फिर statement_B, और अंत में statement_C। कार्यान्वयन यह याद नहीं रख सकता है कि आपने age5 का मान असाइन किया है। हर बयान जो संदर्भ के ageबजाय उस चर के मूल्य तक पहुंचना चाहिए।
volatileयदि अमूर्त मशीन विनिर्देशों के अनुसार C या C ++ कोड को सख्ती से क्रियान्वित किया जाता है, तो कीवर्ड की कोई आवश्यकता नहीं होगी । सी और सी ++ एब्सट्रैक्ट मशीनों में रजिस्टरों की कोई अवधारणा नहीं है, आम सबटेक्शंस की कोई अवधारणा नहीं है, और निष्पादन आदेश सख्त है।
दोनों भाषाओं में भी अगर-जैसे नियम हैं। एक कार्यान्वयन मानक के साथ अनुपालन है जब तक कि कार्यान्वयन व्यवहार करता है जैसे कि उसने अमूर्त मशीन विनिर्देश के अनुसार चीजों को निष्पादित किया था। संकलक मान सकता है कि गैर-वाष्पशील चर असाइनमेंट के बीच मूल्यों को नहीं बदलते हैं। इसलिए जब तक यह as-ifनियम को नहीं तोड़ता statement_A; statement_B; statement_C;है statement_C, तब तक के भाग को निष्पादित करके अनुक्रम लागू किया जा सकता है , फिर का हिस्सा statement_A, फिर सभी का statement_B, फिर बाकी का statement_A, और अंत में बाकी का statement_C।
उन के रूप में करता है, तो नियमों पर लागू नहीं हैं volatileचर। volatileचर और कार्यों के संबंध में , एक क्रियान्वयन को वही करना है जो आपने इसे करने के लिए कहा था, और वास्तव में इस क्रम में आपने इसे चीजों को करने के लिए कहा था।
अमूर्त मशीन विनिर्देश के लिए एक नकारात्मक पहलू है: यह धीमा है। अन्य भाषाओं की तुलना में C और C ++ का एक सकारात्मक पहलू यह है कि वे काफी तेज हैं। यह नहीं होगा अगर इन अमूर्त मशीनों के अनुसार कोड निष्पादित किया गया था। के रूप में करता है, तो नियम क्या सक्षम C और C ++ इतनी तेजी से हो रहे हैं।
ELI5 उत्तर
इसका क्या मतलब है जब संकलक मेमोरी एड्रेस को "ऑप्टिमाइज़ करना" नहीं करता है?
मेमोरी एड्रेस को "ऑप्टिमाइज़ करना" एक उन्नत अवधारणा है, कुछ ऐसा जो पांच साल पुरानी क्षमताओं के दायरे में नहीं है। आज्ञाकारी पाँच वर्ष के बच्चे वही करेंगे जो आप उन्हें करने के लिए कहेंगे, और नहीं, कम नहीं। इसके साथ volatile, आप कार्यान्वयन को पांच की तरह कार्य करने के लिए कह रहे हैं: कोई सोच नहीं, कोई फैंसी अनुकूलन नहीं। इसके बजाय, कार्यान्वयन को वही करना होगा जो कोड इसे करने के लिए कहता है।
volatileचर से बाहर पढ़ रहे हैं और यह 5 कहती है, और आप इसे अगले वर्ष फिर से पढ़ते हैं, तो आपको 6. प्राप्त करने की गारंटी है