निश्चित आकार के ब्लॉक के साथ, आपने जो वर्णन किया है, वह एक निःशुल्क सूची है । यह एक बहुत ही सामान्य तकनीक है, जो निम्नलिखित मोड़ के साथ है: मुक्त ब्लॉकों की सूची स्वयं को मुक्त ब्लॉकों में संग्रहीत किया जाता है। सी कोड में, यह इस तरह दिखेगा:
static void *alloc_ptr = START_OF_BIG_SEGMENT;
static void *free_list_head = NULL;
static void *
allocate(void)
{
void *x;
if (free_list_head == NULL) {
x = alloc_ptr;
alloc_ptr = (char *)alloc_ptr + SIZE_OF_BLOCK;
} else {
x = free_list_head;
free_list_head = *(void **)free_list_head;
}
return x;
}
static void
release(void *x)
{
*(void **)x = free_list_head;
free_list_head = x;
}
यह तब तक अच्छी तरह से काम करता है जब तक सभी आबंटित ब्लॉकों का आकार समान होता है, और यह आकार एक सूचक के आकार का एक गुणक होता है, ताकि संरेखण संरक्षित रहे। आवंटन और डील्लोकेशन निरंतर-समय है (अर्थात, मेमोरी-एक्सेस और प्राथमिक परिवर्धन के रूप में निरंतर-समय के रूप में - एक आधुनिक कंप्यूटर में, एक मेमोरी एक्सेस में कैश मिस और यहां तक कि वर्चुअल मेमोरी शामिल हो सकती है, इसलिए डिस्क एक्सेस होती है, इसलिए "निरंतर समय" काफी बड़ा हो सकता है)। कोई मेमोरी ओवरहेड नहीं है (कोई अतिरिक्त प्रति-ब्लॉक पॉइंटर्स या उस तरह की चीजें नहीं; आवंटित ब्लॉक सन्निहित हैं)। इसके अलावा, आवंटन सूचक किसी दिए गए बिंदु पर तभी पहुंचता है, जब एक समय में, कई ब्लॉकों को आवंटित किया जाना था: चूंकि आवंटन मुक्त सूची का उपयोग करना पसंद करते हैं, आवंटन सूचक केवल तभी बढ़ा है जब वर्तमान सूचक के नीचे की जगह घड़ी भर गई हो। उस अर्थ में, तकनीक।
घटानाएक रिलीज के बाद आवंटन सूचक अधिक जटिल हो सकता है, क्योंकि नि: शुल्क सूची का पालन करके मुक्त ब्लॉकों को विश्वसनीय रूप से पहचाना जा सकता है, जो अप्रत्याशित क्रम में उनके माध्यम से जाता है। यदि संभव हो तो बड़े खंड के आकार को कम करना आपके लिए महत्वपूर्ण है, तो आप अधिक ओवरहेड के साथ एक वैकल्पिक तकनीक का उपयोग करना चाहते हैं: किसी भी दो आवंटित ब्लॉकों के बीच, आप "छेद" डाल सकते हैं। छेद एक डबल-लिंक्ड सूची के साथ मेमोरी क्रम में एक साथ जुड़े हुए हैं। आपको एक छेद के लिए एक डेटा प्रारूप की आवश्यकता होती है, ताकि आप यह जानकर कि यह कहाँ समाप्त होता है, और यह भी पता कर सकें कि छेद का आकार क्या है, यदि आपको पता है कि छेद कहाँ से शुरू होता है। फिर, जब आप एक ब्लॉक जारी करते हैं, तो आप एक छेद बनाते हैं जिसे आप अगले और पिछले छेदों के साथ विलय करते हैं, सभी छेदों की क्रमबद्ध सूची का पुनर्निर्माण (अभी भी निरंतर समय में) करते हैं। ओवरहेड तब आवंटित ब्लॉक के प्रति दो सूचक-आकार के शब्दों के बारे में है; लेकिन, उस कीमत पर, आप मज़बूती से "अंतिम छेद" की घटना का पता लगा सकते हैं, यानी बड़े खंड के आकार को कम करने का अवसर।
कई संभावित बदलाव हैं। एक अच्छा परिचयात्मक पेपर डायनेमिक स्टोरेज आवंटन है: विल्सन एट अल द्वारा एक सर्वेक्षण और महत्वपूर्ण समीक्षा ।