free
और malloc
का उपयोग करें। इससे विखंडन की समस्या नहीं होगी।
आधुनिक आवंटक स्मृति विखंडन के लिए काफी प्रतिरोधी हैं। इन दिनों, विखंडन की समस्याओं के कारण यह काफी पैथोलॉजिकल प्रोग्राम लेता है। फ्रैगमेंटेशन एक और गंभीर समस्या थी जब हमारे कार्यक्रमों ने सीधे भौतिक रैम को संबोधित किया, लेकिन वर्चुअल मेमोरी के साथ किसी प्रोग्राम के ढेर में एक बड़ा "छेद" किसी भी संसाधन का उपभोग करने की आवश्यकता नहीं है।
इसके अलावा, बफर के आकार के कारण, अधिकांश आवंटक प्रत्येक बफर के लिए कर्नेल से समर्पित क्षेत्र का अनुरोध करेंगे। लिनक्स/ओएस एक्स/बीएसडी पर, इसका अर्थ प्रत्येक बफर के दृश्यों के पीछे एक अज्ञात mmap
है। यह पता स्थान के विखंडन का कारण बन सकता है, लेकिन वर्चुअल एड्रेस स्पेस मूल रूप से 64-बिट सिस्टम पर निःशुल्क है, और कुछ सौ मेग 32-बिट पर कोई समस्या नहीं है।
तो free
और malloc
का उपयोग करें।
वैकल्पिक: आपको प्रत्येक बफर को आपकी आवश्यकता से बड़ा बनाने के लिए तेज़ी से मिल सकती है। जिस तरह से malloc
आधुनिक यूनिक्स पर काम करता है, कोई भी पृष्ठ जिसे आप लिखने के लिए नहीं लिखते हैं, स्मृति का उपभोग नहीं करते हैं।
तो यदि आप malloc
एक 500 एमबी बफर का उपयोग करते हैं, लेकिन केवल पहले 100 एमबी का उपयोग करते हैं, तो आपका प्रोग्राम वास्तव में malloc
एक 100 एमबी बफर से अधिक स्मृति का उपयोग नहीं करता है और पूरी चीज का उपयोग करता है। आपको इस तरह से अधिक पता स्थान विखंडन मिलता है, लेकिन 64-बिट सिस्टम पर कोई समस्या नहीं है, और आप हमेशा आवंटन आकार को ट्यून कर सकते हैं ताकि यह 32-बिट सिस्टम पर भी काम कर सके।
के रूप में सुझाव mmap
का उपयोग करने के लिए, mmap
/munmap
के लिए अधिक सरल अंतरफलक के रूप में malloc
/free
का सिर्फ लगता है, जो है क्या यह बड़े आवंटन के लिए है (1 MiB एक आम सीमा है)।
स्रोत
2012-05-21 23:48:10
"हाथ से पहले स्मृति को सुरक्षित करना अन्य समस्याएं पैदा करता है" तो पूलिंग आवंटन उपयुक्त नहीं है? और क्या आप मानक-आश रहना चाहते हैं, या आप एक कस्टम आवंटन योजना के लिए दृष्टिकोण की तलाश में हैं? – Corbin
@ कॉरबिन मुझे नहीं लगता कि मेरे मामले में पूल अच्छे हैं - लिनक्स में NUMA domanis में पहली बार स्पर्श नीति है। मैं * पोर्टेबल * समाधान – Anycorn
बफर में डेटा के प्रबंधन के किसी भी तरीके से रहना चाहता हूं जैसे कि आप आकार बदलने की आवश्यकता से बच सकते हैं? या यहां तक कि बफर आकार पर ऊपरी बाउंड डाल दिया? हार्डवेयर पर आपके पास कितनी मेमोरी है? –