2013-10-09 10 views
8

क्या आप अस्थिर प्रतिलिपि निर्माता के उपयोग को प्रदर्शित करने के लिए एक छोटा या वास्तविक दुनिया उदाहरण दे सकते हैं?अस्थिर प्रतिलिपि बनाने के लिए क्या है?

मैं बस एक के साथ नहीं आ सकता था।

+6

जब आपके पास अस्थिर वस्तुएं होती हैं, तो आपको अस्थिर प्रति-सीटीआर की आवश्यकता होती है। तो सवाल इस पर उबाल जाता है: आपको अस्थिर वस्तुओं की आवश्यकता कब होती है? – Nawaz

उत्तर

8

रूप @Nawaz पहले ही बताया:

आप अस्थिर वस्तुओं है, तो आप अस्थिर कॉपी-ctor की जरूरत है। तो सवाल इस पर उबाल जाता है: आपको अस्थिर वस्तुओं की आवश्यकता कब होती है?

अस्थिर कीवर्ड का उपयोग करने का मुख्य कारण आमतौर पर ऑप्टिमाइज़ेशन को अक्षम करना है। यही कारण है कि अगर आप कुछ इस तरह है:

bool flag = false; 
if(!flag) {} 

संकलक तो झंडा हर बार जांच करने के लिए कोई आवश्यकता नहीं है कि झंडा बदला नहीं जा सकता देखेंगे - तो यह नहीं होगा। लेकिन अगर आप ध्वज परिवर्तनीय अस्थिर बनाते हैं - यह होगा।

यहाँ अस्थिर कीवर्ड मूल उपयोग की एक राय है: link

संक्षेप में, यह मूल रूप से, MMIO के माध्यम से हार्डवेयर का उपयोग करने के लिए इस्तेमाल किया गया था जो कुछ हद तक असामान्य हो सकता है:

unsigned char* pControl = 0xff24 ; 
*pControl = 0 ; 
*pControl = 0 ; 
*pControl = 0 ; 

और तुम नहीं ऑप्टिमाइज़ेशन के कारण उन 3 असाइनमेंट बनना चाहते हैं।

और यहाँ बहु सॉफ्टवेयर में अस्थिर पर आंद्रेई Alexandrescu द्वारा एक कागज है: link

कुछ Alexandrescu के कागज की आलोचना कागजात थे, लेकिन मैं इसे नहीं मिला। मुद्दा यह था कि वह अस्थिर संपत्ति कास्टिंग कर रहा था और इसी तरह।

बहु सूत्रण पर बहुत ही महत्वपूर्ण बात के प्रति सचेत रहें, @JanHudec द्वारा ने कहा:

volatile, मल्टी-थ्रेडेड संदर्भ के लिए पूरी तरह से बेकार है क्योंकि जब यह अनुकूलन को रोकता है, यह स्पष्ट बाधाओं को उत्पन्न नहीं करता है। और एक सीपीयू पर किए गए लिखने के बिना किसी अन्य सीपीयू (वास्तुकला पर निर्भर नहीं हो सकता है; x86 में सुसंगत कैश हैं, इसलिए लिखने हमेशा वहां दिखाई देते हैं)।

भी volatile ऑपरेशन को परमाणु होने के लिए मजबूर नहीं करता है। X86 असाइनमेंट पर हमेशा परमाणु होता है, लेकिन यह सभी CPU आर्किटेक्चर के मामले में नहीं है। और वृद्धि जैसे अधिक जटिल संचालन केवल std::atomic का उपयोग करके परमाणु बना सकते हैं।

+0

राय उपलब्ध नहीं है, वैध परमालिंक का उपयोग करने का प्रयास करें। – Zeta

+0

@Zeta - धन्यवाद। यूआरएल किसी भी तरह गड़बड़ हो गया; संपादित। –

+3

'अस्थिर' बहु-थ्रेडेड संदर्भ के लिए पूरी तरह बेकार है, क्योंकि यह अनुकूलन को रोकता है, यह स्पष्ट बाधा उत्पन्न नहीं करता है। और एक सीपीयू पर किए गए लिखने के बिना किसी अन्य सीपीयू (वास्तुकला पर निर्भर नहीं हो सकता है; x86 में सुसंगत कैश हैं, इसलिए लिखने हमेशा वहां दिखाई देते हैं)। –

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

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