5

में मेमोरी मैनेजमेंट में आकार का डीलोकेशन फ़ीचर आकार में डीलोकेशन सुविधा को सी ++ 1y में शामिल करने का प्रस्ताव दिया गया है। हालांकि मैं समझता हूँ कि यह कैसे को प्रभावित करती है/ वर्तमान C++ निम्न स्तर के स्मृति प्रबंधन में सुधार करना चाहते थे?सी ++ 1 मे

यह प्रस्ताव N3778 है, जो इस के इरादे के बारे में बताता है। साथ

सी ++ 11, प्रोग्रामर एक स्थिर सदस्य समारोह ऑपरेटर परिभाषित कर सकते हैं हटा दें कि एक आकार पैरामीटर वस्तु के आकार का संकेत हटाए जाने के लिए ले जाता है। समकक्ष वैश्विक ऑपरेटर डिलीट उपलब्ध नहीं है। इस चूक में दुर्भाग्यपूर्ण प्रदर्शन परिणाम हैं।

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

उपर्युक्त अनुच्छेद से, यह आकार की जानकारी जैसा दिखता है जो ऑपरेटर को हटाने की आवश्यकता को बनाए रखा जा सकता है और इसलिए प्रयुक्त प्रोग्राम द्वारा पारित किया जा सकता है। यह विलोपन के दौरान आकार के लिए किसी भी खोज से बच जाएगा। लेकिन मेरी समझ के अनुसार, आवंटन करते समय, मेमोरी मैनेजमेंट कुछ प्रकार के शीर्षलेख में आकार की जानकारी संग्रहीत करता है (dlmalloc) में सीमा-टैग विधि समझाया गया है, जिसका उपयोग विलुप्त होने के दौरान किया जाएगा।

T* p = new T(); 
// Now size information would be stored in the header 
// *(char*)(p - 0x4) = size; 
// This would be used when we delete the memory????. 
delete p; 

यदि आकार की जानकारी शीर्षलेख में संग्रहीत की जाती है, तो क्यों डेलोकेशन को इसकी खोज की आवश्यकता होती है? ऐसा लगता है कि मुझे कुछ स्पष्ट याद आ रहा है और इस अवधारणा को पूरी तरह से समझ में नहीं आया।

इसके अतिरिक्त, सी ++ में निम्न स्तर की मेमोरी प्रबंधन से निपटने के दौरान प्रोग्राम में इस सुविधा का उपयोग कैसे किया जा सकता है। उम्मीद है कि कोई मुझे इन अवधारणाओं को समझने में मदद करेगा। अपने उद्धरण में

+0

* "और, अंतरिक्ष दक्षता कारणों के लिए, ऑब्जेक्ट के पास ऑब्जेक्ट के आकार को स्टोर न करें।" * वे अन्य आवंटन रणनीतियों के बारे में बात कर रहे हैं। – dyp

उत्तर

3

के रूप में:

[आधुनिक स्मृति allocators] अंतरिक्ष दक्षता कारणों के लिए, वस्तु के पास वस्तु के आकार की दुकान नहीं है।

स्पष्ट आकार जानकारी जोड़ने के लिए हर आवंटन का आकार बढ़ाने से स्पष्ट रूप से इस तरह के आवंटन पूल प्रति एक बार आकार सूचना के संचय, या आवंटन रद्द करने पर जानकारी की आपूर्ति के रूप में विकल्प की तुलना में अधिक स्मृति का उपयोग करने जा रहा है।

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