मेमोरी मॉडल (प्रोग्रामिंग)

कंप्यूटिंग में, एक मेमोरी मॉडल मेमोरी (कंप्यूटिंग) के माध्यम से थ्रेड (कंप्यूटर साइंस) की बातचीत और डेटा (कंप्यूटिंग) के उनके साझा उपयोग का वर्णन करता है।

इतिहास और महत्व
एक मेमोरी मॉडल एक कंपाइलर को कई महत्वपूर्ण अनुकूलन करने की अनुमति देता है। प्रोग्राम में लूप फ्यूजन मूव स्टेटमेंट जैसे संकलक अनुकूलन, जो संभावित साझा चर (प्रोग्रामिंग) के पढ़ने और लिखने के संचालन के क्रम को प्रभावित कर सकते हैं। पढ़ने और लिखने के क्रम में परिवर्तन दौड़ की स्थिति पैदा कर सकता है। मेमोरी मॉडल के बिना, एक कंपाइलर को सामान्य रूप से या केवल विशेष मामलों में बहु-थ्रेडेड प्रोग्रामों में ऐसे अनुकूलन लागू करने की अनुमति नहीं है। या कुछ कंपाइलरों के लिए कोई बहु-थ्रेडेड निष्पादन नहीं है (इसलिए बेहतर अनुकूलित कोड का उत्पादन किया जा सकता है), जिससे अनुकूलन हो सकता है जो बहु-थ्रेडिंग के साथ असंगत हैं - ये अक्सर सूक्ष्म बग का कारण बन सकते हैं, जो प्रारंभिक परीक्षण में दिखाई नहीं देते हैं.

आधुनिक प्रोग्रामिंग लैंग्वेज जैसे जावा (प्रोग्रामिंग भाषा)  इसलिए एक मेमोरी मॉडल को लागू करते हैं। मेमोरी मॉडल तुल्यकालन बाधाओं को निर्दिष्ट करता है जो विशेष, अच्छी तरह से परिभाषित सिंक्रनाइज़ेशन ऑपरेशंस के माध्यम से स्थापित होते हैं जैसे सिंक्रनाइज़ ब्लॉक या विधि दर्ज करके लॉक प्राप्त करना। मेमोरी मॉडल निर्धारित करता है कि इस तरह के सिंक्रनाइज़ेशन बाधा तक पहुंचने पर साझा चर के मानों में परिवर्तन केवल अन्य धागे के लिए दृश्यमान होने की आवश्यकता होती है। इसके अलावा, इन स्मृति बाधाओं के संबंध में संचालन के क्रम में दौड़ की स्थिति की संपूर्ण धारणा को परिभाषित किया गया है। ये सिमेंटिक्स तब ऑप्टिमाइज़िंग कंपाइलर को ऑप्टिमाइज़ेशन लागू करते समय उच्च स्तर की आज़ादी देते हैं: कंपाइलर को केवल यह सुनिश्चित करने की आवश्यकता होती है कि सिंक्रोनाइज़ेशन बैरियर पर (संभावित रूप से साझा) वैरिएबल के मान अनुकूलित और अडॉप्टिमाइज्ड कोड दोनों में समान होने की गारंटी है। विशेष रूप से, कोड के एक ब्लॉक में पुनर्क्रमित बयान जिसमें कोई सिंक्रनाइज़ेशन बाधा नहीं है, संकलक द्वारा सुरक्षित माना जाता है।

मेमोरी मॉडल के क्षेत्र में अधिकांश शोध इसके इर्द-गिर्द घूमते हैं:


 * एक मेमोरी मॉडल डिजाइन करना जो रेस-फ्री और (शायद अधिक महत्वपूर्ण रूप से) रेस-युक्त कार्यक्रमों के बारे में पर्याप्त गारंटी देते हुए संकलक अनुकूलन के लिए अधिकतम स्वतंत्रता की अनुमति देता है।
 * ऐसे कार्यक्रम अनुकूलन को साबित करना जो ऐसे मेमोरी मॉडल के संबंध में सही हैं।

जावा मेमोरी मॉडल एक लोकप्रिय प्रोग्रामिंग भाषा के लिए व्यापक थ्रेडिंग मेमोरी मॉडल प्रदान करने का पहला प्रयास था। यह स्थापित होने के बाद कि कार्यान्वयन पर कुछ प्रतिबंध लगाए बिना और विशेष रूप से सी (प्रोग्रामिंग भाषा) और सी ++ मानकों (सी 99 और सी ++ 03) में आवश्यक प्रतिबंधों की कमी के बिना धागे को पुस्तकालय (कम्प्यूटिंग)  के रूप में सुरक्षित रूप से कार्यान्वित नहीं किया जा सका।,  उपयुक्त मेमोरी मॉडल पर काम करने के लिए सी ++ थ्रेडिंग उपसमिति सेट; 2005 में, उन्होंने C वर्किंग डॉक्यूमेंट n1131 जमा किया उनके प्रयासों से सी समिति को बोर्ड पर लाने के लिए। प्रस्तावित मेमोरी मॉडल का अंतिम संशोधन, C++ n2429, कोना में अक्टूबर 2007 की बैठक में सी ++ ड्राफ्ट मानक में स्वीकार किया गया था। मेमोरी मॉडल को अगले सी ++ और सी मानकों, सी ++ 11 और सी 11 (सी मानक संशोधन) में शामिल किया गया था।

यह भी देखें

 * मेमोरी ऑर्डरिंग
 * स्मृति बाधा
 * संगति मॉडल
 * साझा मेमोरी (इंटरप्रोसेस संचार)