Bu alloc
uygulama
Bu statik bir tampon dayalı bir malloc
benzeri işlevi uygulayan (ama dağıttı tampon izlenmez çünkü free
tahsis tampon izin vermez) döndürür. Kullanmak istediğiniz bayt sayısıyla alloc
numaralı telefonu arayın ve arabellek için bir işaretçi ya da arabellek kullanılamıyorsa 0'ı işaretleyin. Hadi kıracağız.
static char allocbuf[ALLOCSIZE];
static char *allocp = allocbuf;
allocbuf
verileri tutmak için gidiyor fiili tampon olduğunu. Onunla çalışmak için şimdi tamponun başlangıcını işaret eden bir işaretçi allocp
kullanıyoruz. Bir tampon istendiğinde, önceden kullanılan arabellek parçalarının talebi karşılamak için yeterli alan bırakıp açmadığını kontrol ediyoruz. Bu işaretçi için aritmetik kullanılır: tamponun sonunu hesaplar (allocbuf
ve ALLOCSIZE
ekleyerek), ardından kullanılmayan arabelleğin (allocp
) başlangıcını çıkarırız. Bu, arabellekte bırakılan bayt sayısını verir ve sonra istenen baytların daha az olup olmadığını kontrol edebiliriz. Biz yeterli tampon varsa
{
allocp += n;
return allocp - n;
}
else
return 0;
}
biz allocp
artar. Şimdi, sadece tahsis ettiğimiz tampon bölümünün ardından ilk baytı işaret ediyor. Ardından, ayırdığımız arabellek bölümünün başına bir işaretçi döndürürüz, böylece arayan kişi bunu kullanabilir. Arayana, malloc
'a benzer: bir arabellek ister ve ona bir işaretçi veya NULL
. Geçerli bir işaretçi alırsanız, o zaman kullanabilirsiniz.
Bu, arayanın alloc
numarasını birden çok kez çağırmasına ve her defasında boş yer kaldığı sürece arabelleğin yeni bir parçasının işaretlenmesine izin verir.Verileri işlemek gerekir ama derleme zamanında boyutu hakkında bilmiyorum dinamik bellek
Kullanım
Basitçe söylemek gerekirse, dinamik hafıza kullanılır.
Örneğin, bir dosyadan veri okuyorsanız, derleme sırasında belirttiğiniz boyutta bir statik arabellek kullanabilirsiniz, ancak daha büyük dosyaları okuyamazsınız (veya okumak için özel bir işlem eklemeniz gerekir) dosyaları yığın halinde, ancak uygulamanıza bağlı olarak çalışmayabilir).
Şimdi, belleği dinamik olarak ayırırsanız, derleme sırasında ayarladığınız boyutla sınırlı değilsiniz. Daha sonra her boyuttaki dosyaları okuyabilir (sadece bilgisayarınızda mevcut hafızayla sınırlıdır.)
malloc
sayfalardan (bu) farklılıkların bir çift var alloc
, burada önemli olanları odaklanacağız .
İlk olarak, verilerin yerleştirildiği farklı konumlar vardır. Değişkenler yığınının üzerine yerleştirilir, global veriler bss veya veri (bölümün başlangıcına göre değişir.) Bölümüne yerleştirilir. Ayrıca, bu bölümler sisteminize ve derleyicinize bağlı olarak biraz farklı olarak adlandırılabilir. Dinamik bellek yığın adlı bir bölüm kullanır.
Bu alloc
uygulaması, statik olarak ayrılmış bir arabellek kullanır, böylece veriler bss bölümüne yerleştirilir. malloc
bunun yerine yığını kullanır. İkinci olarak, bu uygulama malloc
'dan çok daha sınırlı bir şekilde gerçekleştirilmiştir. malloc
ile birlikte bir arabelleği tekrar serbest bırakan free
gelir. alloc
statik tampon boyutunu kullandığından Ayrıca, bu boyutuyla sınırlı olması - malloc
bilgisayar ile sınırlıdır
Sen sınırlı üzerinde alloc
gibi bir uygulama kullanacağız (kullanılabilir bellek, yolu işletim sistemi bellek vb kolları) Sistemler: Bir yığın yoksa, arabelleği yeniden serbest bırakmak zorunda kalmazsanız. Bunlar genellikle mikro denetleyiciler üzerinde sahip olduğunuz kısıtlamalar. PC'lerde kendi uygulamanızı kullanmaktan kaçınmalısınız ve sadece malloc
kullanın.
Herhangi bir örnek alabilir miyim .ve onun uygulaması? –