กับบล็อกขนาดคงที่สิ่งที่คุณได้อธิบายเป็นรายการฟรี นี่เป็นเทคนิคที่พบบ่อยมากโดยมีการบิดดังต่อไปนี้: รายการของบล็อกฟรีจะถูกเก็บไว้ในบล็อกฟรี ในรหัส C มันจะเป็นดังนี้:
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;
}
วิธีนี้ใช้ได้ดีตราบใดที่บล็อกที่จัดสรรไว้ทั้งหมดมีขนาดเท่ากันและขนาดนั้นเป็นขนาดหลายเท่าของตัวชี้เพื่อให้การจัดตำแหน่งนั้นถูกรักษาไว้ การจัดสรรและการจัดสรรคืนเป็นเวลาคงที่ (นั่นคือตามเวลาคงที่ในการเข้าถึงหน่วยความจำและการเพิ่มระดับพื้นฐาน - ในคอมพิวเตอร์ที่ทันสมัยการเข้าถึงหน่วยความจำอาจเกี่ยวข้องกับแคชคิดถึงและแม้แต่หน่วยความจำเสมือนดังนั้นการเข้าถึงดิสก์ อาจจะค่อนข้างใหญ่) ไม่มีโอเวอร์เฮดหน่วยความจำ (ไม่มีพอยน์เตอร์บล็อกต่อบล็อกหรืออะไรแบบนั้นบล็อกที่จัดสรรนั้นต่อเนื่องกัน) นอกจากนี้ตัวชี้การจัดสรรจะมาถึงจุดที่กำหนดเฉพาะในเวลาเดียวที่ต้องมีการจัดสรรบล็อกจำนวนมาก: เนื่องจากการจัดสรรต้องการใช้รายการฟรีตัวชี้การจัดสรรจะเพิ่มขึ้นเฉพาะเมื่อพื้นที่ด้านล่างตัวชี้ปัจจุบันเต็มนาฬิกา ในแง่ที่ว่า, เทคนิค.
ลดลงตัวชี้การจัดสรรหลังจากรีลีสอาจมีความซับซ้อนมากขึ้นเนื่องจากบล็อกฟรีสามารถระบุได้อย่างน่าเชื่อถือโดยทำตามรายการฟรีเท่านั้นซึ่งจะดำเนินการผ่านรายการเหล่านั้นตามลำดับที่คาดเดาไม่ได้ หากการลดขนาดเซกเมนต์ใหญ่เมื่อเป็นไปได้มีความสำคัญสำหรับคุณคุณอาจต้องการใช้เทคนิคทางเลือกพร้อมค่าใช้จ่ายที่มากขึ้น: ระหว่างบล็อกที่จัดสรรสองชุดคุณใส่ "หลุม" หลุมจะถูกเชื่อมโยงพร้อมกับรายการที่เชื่อมโยงเป็นสองเท่าตามลำดับหน่วยความจำ คุณต้องมีรูปแบบข้อมูลสำหรับรูที่คุณสามารถค้นหาที่อยู่เริ่มต้นของรูด้วยการรู้ว่ามันอยู่ตรงไหนและขนาดของรูถ้าคุณรู้ว่ารูเริ่มในหน่วยความจำ จากนั้นเมื่อคุณปล่อยบล็อกคุณจะสร้างหลุมที่คุณรวมกับหลุมถัดไปและก่อนหน้าสร้างใหม่ (ยังคงอยู่ในเวลาคงที่) รายการสั่งซื้อของหลุมทั้งหมด ค่าโสหุ้ยนั้นประมาณสองคำขนาดตัวชี้ต่อการจัดสรรบล็อก; แต่ในราคานั้นคุณสามารถตรวจจับการเกิดของ "หลุมสุดท้าย" ได้อย่างน่าเชื่อถือนั่นคือโอกาสที่จะลดขนาดเซ็กเมนต์ขนาดใหญ่
มีรูปแบบที่เป็นไปได้มากมาย กระดาษเบื้องต้นที่ดีคือการจัดสรรพื้นที่เก็บข้อมูลแบบไดนามิก: การสำรวจและการทบทวนที่สำคัญโดย Wilson และคณะ