में कोई गठबंधन कॉलक क्यों नहीं है C11 मानक ने aligned_alloc
फ़ंक्शन को अनियंत्रित गठबंधन स्मृति आवंटित करने के लिए जोड़ा। मानक में स्मृति को आवंटित करने के लिए calloc
फ़ंक्शन भी शामिल है जो शून्य पर प्रारंभ किया गया है लेकिन केवल इसे सबसे बड़े प्रकार के आकार में संरेखित करता है।सी 11
सी 11 मानक में aligned_calloc
फ़ंक्शन शामिल नहीं है जो शून्य की शुरुआत वाली गठबंधन स्मृति आवंटित करता है?
मुझे पता है कि आप केवल आरंभिक मेमोरी प्राप्त करने के लिए परिणाम को याद कर सकते हैं लेकिन calloc
फ़ंक्शन कुछ ऑपरेटिंग सिस्टम पर बहुत उपयोगी है क्योंकि कर्नेल द्वारा प्रदान की गई स्मृति को सुरक्षा कारणों से अक्सर पहले ही शून्य प्रारंभ किया जाना चाहिए (और पृष्ठ आकार में गठबंधन किया जाना चाहिए) । calloc
इसका उपयोग कर सकते हैं और डबल प्रारंभिकरण से बच सकते हैं।
इसके अतिरिक्त कुछ ऑपरेटिंग सिस्टम (जैसे लिनक्स) कॉपी-ऑन-राइट फैशन में स्मृति प्रदान करते हैं जो calloc
के साथ आदिम स्पैस डेटा संरचनाओं को बनाने की अनुमति देता है। aligned_alloc
के परिणाम पर प्रारंभिक यादृच्छिकता इस संपत्ति को नष्ट कर देती है।
ऐसा लगता है कि पोर्टेबल नहीं होने पर, ये फायदे एक दूसरे गठबंधन आवंटन समारोह के लिए पर्याप्त होना चाहिए।
शायद क्योंकि डिजाइन यह तय करने की कला है कि क्या शामिल करना है और क्या छोड़ना है, और यह बार को पूरा नहीं करता है (भले ही संदिग्ध उपयोग के कई कार्यों में)। वैसे भी, इसे प्रदान करने और अगले मानक में शामिल होने से किसी भी कार्यान्वयन को रोकना कुछ भी नहीं है। – Deduplicator
न केवल किसी भी प्रणाली को 'aligned_calloc' प्रदान करने के लिए स्वतंत्र है, लेकिन आप शायद पहले से ही mmap() ing/dev/zero द्वारा कई प्रणालियों पर कार्यक्षमता का अनुकरण कर सकते हैं, जो स्मृति को तत्काल करने का कारण नहीं बनना चाहिए। –
सुनिश्चित करें कि आप ऑलोकेटर का उपयोग करके कस्टम कॉलोक से ऑफसेट लौटकर इसे स्वयं संरेखित कर सकते हैं, लेकिन आप aligned_alloc और posix_memalign आवंटित स्मृति के विपरीत, इसे या mmap स्मृति को मुक्त नहीं कर सकते हैं। लेकिन मैं सोच रहा हूं कि शुद्धता के लिए नए कार्यों की संख्या को कम करने के अलावा ओमिसन का कोई कारण है या नहीं। – jtaylor