2011-01-11 11 views
9

से मॉलोक कार्यान्वयन मुझे एक सामान्य मॉलोक कार्यान्वयन की आवश्यकता है जो एक बड़े निश्चित आकार के बफर का उपयोग करता है। SQLite के "Zero-malloc memory allocator" के समान कुछ है। क्या आप इस तरह के किसी भी कार्यान्वयन के बारे में जानते हैं? यह हल्के वजन और पोर्टेबल होना चाहिए जिसका उपयोग एम्बेडेड अनुप्रयोगों के लिए किया जा सकता है।फिक्स्ड साइज बफर

अग्रिम धन्यवाद।

+0

आपके मॉलोक के साथ क्या गलत है? – mathk

+0

@ मैथक: मेमोरी विखंडन (या नहीं)। हाथ से पहले जानना चाहते हैं कि स्मृति कर्नेल प्रक्रिया को कितना आवंटित करेगा। – Manish

उत्तर

6

दो सुझाव:

  1. यदि आप कुछ उत्पादन गुणवत्ता और अच्छी तरह से परीक्षण किया है, सिर्फ SQLite के संभाजक उधार की जरूरत है। SQLite का स्रोत कोड बहुत अच्छी तरह से लिखा गया है, प्रलेखित, बेहद अच्छी तरह से परीक्षण किया गया है और इसमें बहुत ही अनुमोदित ओपन-सोर्स लाइसेंस है।
  2. आईएफ आपको एम्बेडेड वातावरण में सीखने या उपयोग करने के लिए कुछ छोटे और सरल की आवश्यकता है, this implementation [लापरवाही प्लग!] पर विचार करें - सी कोड टिप्पणी के 350 एलओसी पर विचार करें।
+0

मैं आपके द्वारा लिंक किए गए पोस्ट पर कुछ टिप्पणीकारों से सहमत हूं - इस प्रकार का आवंटक एम्बेडेड सिस्टम (विनाशकारी विखंडन) के लिए मजबूती की समस्या को हल करने के लिए कुछ भी नहीं करता है। ओपी को आवश्यकताओं को बेहतर तरीके से अवश्य कहना चाहिए और इस बात पर विचार करना चाहिए कि क्या उन्होंने वास्तव में समस्या को हल कर सकते हैं। –

+0

@ आर: विखंडन की कमी उस आवंटक का उद्देश्य नहीं थी, बल्कि एम्बेडेड अनुप्रयोगों द्वारा आवश्यक ढेर मेमोरी की कुल मात्रा को विश्वसनीय तरीके से कंप्यूटिंग करना था। –

+1

धन्यवाद। मैं परीक्षण उद्देश्य के लिए एक सरल कार्यान्वयन की तलाश में था। मैं देखता हूं कि realloc लागू नहीं किया गया है। मैं इसे बड़े कोड बेस का उपयोग करने की योजना बना रहा था जिसमें उपयोग में भी reallocs है। मुझे लगता है कि पोर्ट और एसक्यूएलएट कार्यान्वयन के लिए यह सर्वोत्तम है जैसा आपने और दूसरों को सुझाव दिया है। मैंने ऐसा नहीं किया क्योंकि मुझे उम्मीद थी कि किसी और ने ऐसा किया होगा और क्योंकि मैं आलसी हूं :) – Manish

4

SQLite स्रोत कोड स्वतंत्र रूप से उपलब्ध है। यदि आप इसे एक विशेष कार्यान्वयन पसंद करते हैं, तो इसका उपयोग क्यों न करें?

1

अधिकांश वर्तमान malloc कार्यान्वयन ओएस से प्राप्त स्मृति के एक बड़े हिस्से को बनाकर काम करते हैं। यदि वह ब्लॉक समाप्त हो जाता है, malloc ओएस को एक नए बड़े ब्लॉक के लिए पूछता है।

आप एक मौजूदा malloc कार्यान्वयन (उदाहरण के glibc एक के लिए) पर अपने खुद के कार्यान्वयन का आधार हो सकता है, और बदले में ओएस से एक ब्लॉक प्राप्त करने की, आप एक ही स्थिर बफर का उपयोग करें। जब यह खत्म हो जाता है, malloc असफल हो जाएगा, जैसा कि ओएस करता है जब ओएस कोई नया ब्लॉक प्रदान नहीं कर सकता है।

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