2011-01-25 13 views
6

मुझे कुछ तेज़, थ्रेड सुरक्षित मेमोरी पूलिंग लाइब्रेरी की आवश्यकता है। मैंने बहुत कुछ किया है, लेकिन तेज समाधानों में थ्रेड सुरक्षा नहीं है, जबकि अन्य वास्तव में बड़े हैं।सी: मेमोरी पूल पुस्तकालय?

कोई सुझाव?

+0

क्यों नहीं malloc()? यह बहुत धीमी है? क्या आपने कुछ प्रति थ्रेड पूल की कोशिश की? यह तेज़ है, लेकिन कुछ स्मृति बर्बाद करें। –

+0

मेरे पास छोटे भाग (<500b) के साथ प्रति सेकंड मॉलोक/फ्री प्रति सेकंड हैं, इसलिए हाँ, बस मुफ्त/मॉलोक वास्तव में धीमे हैं। मैं कुछ थ्रेड सुरक्षित समाधान भी प्राप्त करना चाहता हूं इसलिए धागे में पूल प्रबंधन के बारे में मुझे सिरदर्द नहीं होगा। – Daniel

+0

क्षेत्र मेमोरी प्रबंधन पर भी विचार करें। यदि यह आपके लिए उपयुक्त है तो यह कई गुना तेज होगा। – Joshua

उत्तर

7

दोनों nedmalloc और ptmalloc देखें सी आधारित धागा कैशिंग स्मृति प्रबंधकों, डौग ली के malloc (सबसे linux allocators की कोर) के आसपास आधारित है। वे दोनों अच्छे लाइसेंस के तहत भी हैं, होर्ड के विपरीत, जिसके लिए वाणिज्यिक उपयोग के लिए भुगतान की आवश्यकता है, आखिरकार मैंने देखा। गूगल्स टीसीएमएलओसी में सी बाइंडिंग्स आईआईआरसी भी है, और इसे ग्राउंड अप से थ्रेड कैशिंग आवंटक के रूप में बनाया गया है, साथ ही कुछ हीप और सीपीयू प्रोफाइलिंग टूल में बनाया गया है, हालांकि यह बड़े पैमाने पर मेमोरी उपयोग के लिए बनाया गया है (उदाहरण वे 300 एमबी + प्रति थ्रेड), और ऐसे कई काम नहीं करते हैं, साथ ही साथ छोटे पैमाने पर ऐप्स

+0

धन्यवाद! nedmalloc वही है जो मैं खोज रहा था। – Daniel

0

अच्छी तरह से काम करता है और यह सब बड़ा नहीं होना चाहिए।

+0

मैंने एपीआर को पहले दृष्टिकोण के रूप में आजमाया है और यह वास्तव में बड़ा है + बहुत अधिक एपीआई है जिसका मैं उपयोग नहीं करूँगा। – Daniel

2

आपको प्रति थ्रेड एक मेमोरी पूल का उपयोग करना होगा।

+2

ध्यान दें कि यह मदद कर सकता है, फिर भी ऐसे थ्रेडिंग मुद्दे हैं जिन पर ध्यान देने की आवश्यकता है - जबकि आप यह सुनिश्चित कर सकते हैं कि किसी विशेष थ्रेड से आवंटन किसी विशेष पूल को निर्देशित किया जा सके, आपको किसी भी पूल के लिए किसी भी पूल के लिए ब्लॉक को खाली करने के लिए तैयार रहना होगा धागा। –

+0

मुझे प्रत्येक थ्रेड के लिए अलग मेमोरी पूल का उपयोग क्यों करना चाहिए? – Daniel

+0

यह एक थ्रेड एरिया भी अपने फ्री स्टोर में सैकड़ों मेगाहर्ट्ज मेमोरी को आरक्षित कर सकता है, जो अन्य थ्रेड एरिया को भूखा कर रहा है, जिसे वास्तव में मेमोरी आवंटित करने की आवश्यकता है – Necrolis

0

क्या आपने Hoard को आजमाया है?

भी इन twoarticles Intel.com

से
+0

मैंने इसे देखा है, लेकिन ऐसा लगता है कि मौजूदा एप्लिकेशन (एलडी_PRELOAD) पर बोल्ट है, जबकि मुझे पूल पर कुछ नियंत्रण होना चाहिए (आकार, अधिकतम आकार, वर्तमान उपयोग, आदि ...) – Daniel

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