1.
bilgisayarda stack'in sebep olduğu aşırı kısıtlayıcı ve genelde değiştirmeye açık olmayan yapısını esnetmek amacıyla geliştirilmiş bir hafıza bölgesidir. pointers, yani işaretçiler kullanılarak hafızanın o kısmına erişmek mümkündür, aksi takdirde tüm işlemlerinizi stack bölgesinde gerçekleştirirsiniz. ayrıca, heap de günün sonunda stack bölümüne işaretçilerle eklendiğinden yazılımcı için tam olarak özgür bir ortam oluştuğundan bahsedilemez.
peki niye böyle bir şeye ihtiyaç duyulur? en basitinden şu örnek verilebilir: dizilerde normalde boyutu bir değişken olarak tutup kafanıza göre değiştiremezsiniz. ama saklayacağınız verilerin sayısı değişeceğinden buna ihtiyaç duyabilirsiniz. işte hal böyleyken heap'e başvurulur.
peki gene diyebilirsiniz ki bu nasıl mümkün olabilir? heap, stack gibi katı bir sıra gözetmez. eğer ilk boş yerin boyutu sizin ihtiyaç duyduğunuzdan küçükse bir sonraki boş alana geçilir ve aynı sorgu orada da takip edilir. ta ki istenen nitelikte bir boş alan buluncaya kadar da buna devam edilir.
diziyi başka bir yere taşıma işlemini c++'ta şöyle ifade edebiliriz:*
#include <iostream>
int main()
{
int *a = new int [5];
int i, h;
for (i = 0; i < 5; i++)
{
a[i] = i * i;
}
int *k = new int [8];
for (h = 0; h < 5; h++)
{
k[h] = h * h;
}
a[i] = k [h];
delete [ ] a;
a = k;
}
böylece hem dizimizi taşımış, hem ekstra alan açmış hem de önceki alanın artık boş olduğunu bilgisayara iletmiş olduk.
peki niye böyle bir şeye ihtiyaç duyulur? en basitinden şu örnek verilebilir: dizilerde normalde boyutu bir değişken olarak tutup kafanıza göre değiştiremezsiniz. ama saklayacağınız verilerin sayısı değişeceğinden buna ihtiyaç duyabilirsiniz. işte hal böyleyken heap'e başvurulur.
peki gene diyebilirsiniz ki bu nasıl mümkün olabilir? heap, stack gibi katı bir sıra gözetmez. eğer ilk boş yerin boyutu sizin ihtiyaç duyduğunuzdan küçükse bir sonraki boş alana geçilir ve aynı sorgu orada da takip edilir. ta ki istenen nitelikte bir boş alan buluncaya kadar da buna devam edilir.
diziyi başka bir yere taşıma işlemini c++'ta şöyle ifade edebiliriz:*
#include <iostream>
int main()
{
int *a = new int [5];
int i, h;
for (i = 0; i < 5; i++)
{
a[i] = i * i;
}
int *k = new int [8];
for (h = 0; h < 5; h++)
{
k[h] = h * h;
}
a[i] = k [h];
delete [ ] a;
a = k;
}
böylece hem dizimizi taşımış, hem ekstra alan açmış hem de önceki alanın artık boş olduğunu bilgisayara iletmiş olduk.
devamını gör...