मैं थोड़ा पार्टी के लिए देर हो रही है, लेकिन मैं सिर्फ मैं हाल ही में पाया जाता है और परीक्षण किया है एम्बेडेड प्रणाली के लिए बहुत ही कुशल स्मृति allocator साझा करना चाहते हैं: https://github.com/dimonomid/umm_malloc
यह विशेष रूप से काम करने के लिए तैयार किया गया एक स्मृति प्रबंधन पुस्तकालय है एआरएम 7 के साथ, व्यक्तिगत रूप से मैं इसे पीआईसी 32 डिवाइस पर उपयोग करता हूं, लेकिन इसे किसी भी 16- और 8-बिट डिवाइस पर काम करना चाहिए (मेरे पास 16-बिट पीआईसी 24 पर परीक्षण करने की योजना है, लेकिन मैंने अभी तक इसका परीक्षण नहीं किया है)
मुझे डिफ़ॉल्ट आवंटक के साथ विखंडन से गंभीरता से पीटा गया था: मेरी परियोजना अक्सर कई बाइट्स से कई सैकड़ों बाइट्स तक विभिन्न आकारों के ब्लॉक आवंटित करती है, और कभी-कभी मुझे 'स्मृति से बाहर' त्रुटि का सामना करना पड़ता है। मेरे पीआईसी 32 डिवाइस में कुल 32 के रैम है, और ढेर के लिए 8192 बाइट्स का उपयोग किया जाता है। विशेष पल में 5K से अधिक मुक्त मेमोरी है, लेकिन विखंडन के कारण डिफ़ॉल्ट आवंटक में लगभग 700 बाइट्स की अधिकतम गैर-खंडित मेमोरी ब्लॉक है। यह बहुत बुरा है, इसलिए मैंने अधिक कुशल समाधान की तलाश करने का फैसला किया।
मुझे पहले से ही कुछ आवंटकों के बारे में पता था, लेकिन उनमें से सभी की कुछ सीमाएं हैं (जैसे ब्लॉक आकार एक शक्ति या 2 होना चाहिए, और 2 से नहीं, लेकिन कहें, 128 बाइट्स), या बस छोटी गाड़ी थी। हर बार, मुझे डिफ़ॉल्ट आवंटक पर वापस स्विच करना पड़ा।
लेकिन इस बार, मैं भाग्यशाली हूँ: http://hempeldesigngroup.com/embedded/stories/memorymanager/
मैं मुक्त स्मृति की 5K के साथ इस स्मृति allocator की कोशिश की तो बिल्कुल एक ही स्थिति में, यह एक से अधिक 3800 बाइट्स ब्लॉक: मैं इस एक मिल गया है ! यह मेरे लिए इतना अविश्वसनीय था (700 बाइट्स की तुलना में), और मैंने कड़ी मेहनत की: डिवाइस ने 30 घंटे से अधिक समय तक काम किया। कोई स्मृति रिसाव नहीं है, सबकुछ काम करता है क्योंकि इसे काम करना चाहिए। मुझे फ्रीआरटीओएस रिपोजिटरी में यह आवंटन भी मिला: http://svnmios.midibox.org/listing.php?repname=svn.mios32&path=%2Ftrunk%2FFreeRTOS%2FSource%2Fportable%2FMemMang%2F&rev=1041&peg=1041#, और यह तथ्य umm_malloc की स्थिरता का एक अतिरिक्त सबूत है। तो मैंने पूरी तरह से umm_malloc पर स्विच किया, और मैं इसके साथ काफी खुश हूं।
मुझे बस इसे थोड़ा बदलना पड़ा: मैक्रो UMM_TEST_MAIN परिभाषित नहीं होने पर कॉन्फ़िगरेशन थोड़ा गड़बड़ था, इसलिए, मैंने जिथब रिपोजिटरी बनाई है (लिंक इस पोस्ट के शीर्ष पर है)। अब, उपयोगकर्ता निर्भर विन्यास अलग फ़ाइल umm_malloc_cfg में संग्रहीत है।एच
मुझे इस आवंटक में लागू एल्गोरिदम में गहराई से नहीं मिला है, लेकिन इसमें एल्गोरिदम का बहुत विस्तृत स्पष्टीकरण है, इसलिए रुचि रखने वाला कोई भी व्यक्ति umm_malloc.c फ़ाइल के शीर्ष पर देख सकता है। कम से कम, "बिनिंग" दृष्टिकोण को कम विखंडन में बड़ा लाभ देना चाहिए: http://g.oswego.edu/dl/html/malloc.html
मेरा मानना है कि माइक्रोकंट्रोलर के लिए कुशल स्मृति आवंटक की आवश्यकता वाले किसी भी व्यक्ति को कम से कम इसे आजमाएं।
इस उद्देश्य के लिए प्रयुक्त लोकी, सभी ने बहुत अच्छा काम किया, और –
क्रिस में बहुत कम समय लगा, क्या आप मेमोरी पूल के साथ ग्लिबैक मॉलोक के संशोधित संस्करण के लिए कोड साझा करने के इच्छुक होंगे? –