2011-01-03 26 views
10

इमेजिंग आपको बाइट्स वाली कुछ मेमोरी मिली है: [++++++ ----- ++++ - ++ - ++++++++ -------- +++ ++]विखंडन की गणना कैसे करें?

हम कहते हैं कि "+" आवंटित करने का मतलब है और करते हैं "-" मुक्त का मतलब है।

मैं विखंडन के प्रतिशत की गणना करने के लिए फॉर्मूला खोज रहा हूं।

पृष्ठभूमि: मैं स्थिर स्मृति एक एम्बेडेड डिवाइस के लिए एक छोटे से गतिशील स्मृति प्रबंधन को लागू कर रहा हूँ। मेरा लक्ष्य कुछ ऐसा है जो मैं थोड़ी मात्रा में डेटा संग्रहीत करने के लिए उपयोग कर सकता हूं। वायरलेस कनेक्शन पर अधिकतर आने वाले पैकेट ~ 128 बाइट प्रत्येक।

आपकी मदद के लिए धन्यवाद।

+0

आह ... मैं देख रहा हूँ होगा। यह इस बात पर निर्भर करता है कि मेरे आवंटन ब्लॉक कितने बड़े हैं। – Bigbohne

+0

यदि आपके सभी ब्लॉक एक ही आकार के हैं, और आपकी मेमोरी स्थिर है और आपकी प्रणाली मेमोरी एक्सेस के लिए कैशिंग का उपयोग करने के लिए बहुत छोटी है, तो विखंडन वास्तव में कोई फर्क नहीं पड़ता - आपको ट्रैक रखना होगा कि कौन से स्लॉट मुक्त हैं और कौन नहीं हैं, लेकिन पहुंच में चारों ओर कूदना आपको ज्यादा खर्च नहीं करना चाहिए। यह एक इलेक्ट्रोमेक्निकल डिस्क ड्राइव के विपरीत है जहां आपको चारों ओर छोड़ते समय सिर को स्थानांतरित करना होता है, या शायद धीमी डीआरएएम और चेश की एक प्रणाली जहां आसपास घूमना बहुत सारे कैश मिस का कारण बनता है। –

उत्तर

6

आर कहते हैं, यह वास्तव में निर्भर करता है आप "विखंडन का प्रतिशत" द्वारा क्या मतलब है - लेकिन एक सरल सूत्र आप इस्तेमाल कर सकते हैं होगा:

(free - freemax) 
---------------- x 100% (or 100% for free=0) 
    free 

जहां

free  = total number of bytes free 
freemax = size of largest free block 

इस तरह, यदि सभी मेमोरी एक बड़े ब्लॉक में हैं, तो विखंडन 0% है, और यदि स्मृति सभी सैकड़ों छोटे ब्लॉक में बनाई गई है, तो यह 100% के करीब होगी।

+0

मुझे यह पसंद है। मूल्यांकन करना है :) – Bigbohne

6

गणना करें कि वर्तमान मेमोरी लेआउट में आप कितने 128 बाइट पैकेट फिट कर सकते हैं। उस नंबर एन होने दें।

गणना करें कि आप कितने 128 बाइट्स पैकेट्स को मेमोरी लेआउट में फिट कर सकते हैं, जो वर्तमान की तुलना में आवंटित बाइट्स की एक ही संख्या के साथ फिट हो सकते हैं, लेकिन बिना किसी छेद के (उदाहरण के लिए, सभी + बाईं ओर स्थानांतरित करें)। है कि नंबर एन हो

आपका "विखंडन अनुपात" होगा अल्फा = n/एन

3

अपने आवंटन सब लगभग एक ही आकार, बस TOTAL/MAXSIZE टुकड़ों में अपनी स्मृति को विभाजित प्रत्येक MAXSIZE बाइट्स से मिलकर कर रहे हैं । फिर विखंडन अप्रासंगिक है।

सामान्य रूप से आपके प्रश्न का उत्तर देने के लिए, "विखंडन" के लिए कोई जादू संख्या नहीं है। खंडित स्मृति कैसे है यह दर्शाते हुए आपको विभिन्न कार्यों के गुणों का मूल्यांकन करना होगा। यहाँ एक मैं एक आकार n के एक समारोह के रूप में, की सिफारिश करेंगे है:

fragmentation(n) = -log(n * number_of_free_slots_of_size_n/total_bytes_free) 

ध्यान दें कि log सिर्फ एक "0 अनंत को" पैमाने के लिए चीजों को मैप करने के लिए; आपको वास्तव में अभ्यास में इसका मूल्यांकन नहीं करना चाहिए। इसके बजाय आप बस का मूल्यांकन हो सकता है:

freespace_quality(n) = n * number_of_free_slots_of_size_n/total_bytes_free 

1.0 साथ किया जा रहा है आदर्श बहुत बुरा (किसी भी आवंटित करने में असमर्थ) जा रहा है और 0.0 (आकार n की वस्तुओं की अधिकतम संभव संख्या आवंटित करने में सक्षम)।

0

यदि आप था [++++++ ----- ++++++ - ++++++++ -------- +++++] और आप मुक्त स्थान (या किसी अन्य आवंटन) के विखंडन को मापना चाहते थे आप औसत संगत ब्लॉक आकार कुल ब्लॉक/संगत ब्लॉक की गणना को माप सकते हैं।

इस मामले में यह 4/(5 + 2 + 1 + 8)/4 = 4

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