Sabit boyutlu bloklarda, tanımladığınız şey ücretsiz bir listedir . Bu, aşağıdaki bükülme ile çok yaygın bir tekniktir: serbest blokların listesi serbest blokların kendisinde saklanır. C kodunda şöyle görünecektir:
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;
}
Bu, tahsis edilen tüm bloklar aynı boyuta sahip olduğu ve bu boyutun bir işaretçinin boyutunun katı olduğu sürece iyi çalışır, böylece hizalama korunur. Ayırma ve yeniden yerleştirme sabit sürelidir (yani, bellek erişimi ve temel eklemeler gibi sabit süredir - modern bir bilgisayarda, bellek erişimi önbellek özümlerini ve hatta sanal belleği içerebilir, dolayısıyla disk erişimlerini içerebilir, böylece "sabit zaman" oldukça büyük olabilir). Bellek yükü yoktur (blok başına fazladan işaretçi veya bunun gibi şeyler yoktur; tahsis edilen bloklar bitişiktir). Ayrıca, ayırma işaretçisi yalnızca bir kerede birçok bloğun atanması gerektiğinde belirli bir noktaya ulaşır: ayırma serbest listeyi kullanmayı tercih ettiğinden, ayırma işaretçisi yalnızca geçerli işaretçinin altındaki boşluk saat dolu olduğunda artar. Bu anlamda, tekniği.
azalanserbest bırakma işleminden sonra ayırma işaretçisi daha karmaşık olabilir, çünkü serbest bloklar, yalnızca öngörülemeyen sırayla geçen serbest liste izlenerek güvenilir bir şekilde tanımlanabilir. Mümkün olduğunda büyük segment boyutunu azaltmak sizin için önemliyse, daha fazla yük ile alternatif bir teknik kullanmak isteyebilirsiniz: tahsis edilen iki blok arasına bir "delik" koyarsınız. Delikler, bellek düzeninde çift bağlantılı bir listeyle birbirine bağlanır. Bir delik için, nerede bittiğini bilerek delik başlangıç adresini ve deliğin bellekte nerede başladığını biliyorsanız delik boyutunu bulabileceğiniz bir veri formatına ihtiyacınız vardır. Daha sonra, bir bloğu serbest bıraktığınızda, sonraki ve önceki deliklerle birleştirdiğiniz, tüm deliklerin sıralı listesini (yine sabit zamanda) yeniden oluşturduğunuz bir delik oluşturursunuz. Tepegöz daha sonra tahsis edilen blok başına yaklaşık iki işaretçi boyutunda sözcüktür; ancak bu fiyatta, bir "son delik" oluşumunu, yani büyük segment boyutunu azaltma vesilesiyle güvenilir bir şekilde tespit edebilirsiniz.
Birçok olası varyasyon vardır. İyi bir giriş belgesi Dinamik Depolama Tahsisi: Wilson ve ark.