मेरी दुनिया में सबसे आम मामला यह है कि जब आप प्रोग्रामिंग माइक्रोक्रोनरोलर प्रोग्रामिंग कर रहे हैं जो स्मृति-मैप किए गए I/O का उपयोग करते हैं। बाहरी डिजिटल इनपुट के कारण एक रजिस्टर में मूल्य बदल सकता है, लेकिन यदि आप volatile
के रूप में एक चर घोषित नहीं करते हैं, तो संकलक पूरी तरह से कोड को अनुकूलित कर सकता है और आप सोचेंगे कि कुछ भी क्यों काम नहीं करता है।
मैट ने सुझाव दिया कि मैं "ऑप्टिमाइज़ आउट" प्राप्त करने वाले कोड के बारे में बयान पर सजा देता हूं। मेमोरी मैप किए गए I/O को पॉइंटर्स के माध्यम से कोड में एक्सेस किया जाता है। जब आप किसी बटन की स्थिति जांचना चाहते हैं, तो आप बटन के लिए बिटमैस्क के साथ आमतौर पर बिटवाई और रजिस्टर का मान लेंगे। यदि आप अस्थिर निर्दिष्ट नहीं करते हैं, तो संकलक कहेंगे, "अरे, आपका कोड वास्तव में उस सूचक के मान को कभी भी नहीं बदलता है, इसलिए मैं उस कथन को हटाने जा रहा हूं जहां आपने थोड़ा सा किया है, क्योंकि यह मान हमेशा होता है वही!"।
उम्मीद है कि यह मेरे कथन को थोड़ा सा साफ़ कर देगा। सुझाव के लिए धन्यवाद, मैट।
देखें: http://stackoverflow.com/questions/2535148/volatile-qualifier-and-compiler-reorderings (हालांकि दूसरे प्रश्न में सी ++ और सी टैग दोनों याद हैं कि सी ++ को यह कीवर्ड सी से मिला है। – dirkgently
डॉ। डॉब्स - http://www.drdobbs.com/184403766;jsessionid=4HI2GRADWCN51QE1GHRSKHWATMY32JVN – pankajt
देखें [ सी में अस्थिर क्यों आवश्यक है? ] (http://stackoverflow.com/questions/246127/why-is-volatile-needed-in-c)। –