08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

#include <br />

#include <br />

int main()<br />

{<br />

int *pd;<br />

int i;<br />

pd = (int *) malloc(10 * sizeof(int));<br />

if (!pd) {<br />

printf("yetersiz bellek!..\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

for (i = 0; i < 10; ++i)<br />

printf("pd[%d] = %d\n", i, pd[i]);<br />

}<br />

return 0;<br />

Dinamik bellek işlevlerinin kullanımına sunulan bellek bölgesi İngilizce'de heap olarak<br />

isimlendirilir. C++ dilinde bu alan free store olarak isimlendirilir. heap alanının büyüklüğü<br />

sistemden sisteme değişebilir ancak çalışabilir bir program söz konusu olduğunda,<br />

çalıştırılacak programın belleğe yüklenmesiyle, belirli büyüklükte bir heap alanı programın<br />

kullanımına ayrılır.<br />

Sistemlerin çoğunda malloc işlevinin parametre değişkeni unsigned int (size_t) türünden<br />

olduğuna göre, malloc işlevi ile DOS altında en fazla 65535 byte yani 64KB büyüklüğünde<br />

bir blok elde edilebilir. Oysa UNIX, WINDOWS gibi 32 bitlik sistemlerde unsigned int türü<br />

4 byte uzunluğunda olduğuna göre, bu sistemlerde teorik olarak, malloc işlevi ile<br />

4294967295 byte (4 MB) uzunluğunda bitişik bir blok elde edilebilir. Tabi bu durum,<br />

dinamik yer ayırma işleminin güvence altında olduğu anlamına gelmez.<br />

Heap alanı da sınırlıdır. Sürekli malloc işlevinin çağrılması durumunda, belirli bir noktadan<br />

sonra işlevler başarısız olarak NULL adresine geri döner.<br />

Aşağıda, kullanılan heap alanının büyüklüğü bir kod ile elde edilmeye çalışılıyor:<br />

#include <br />

#include <br />

#defineBLOCK_SIZE 2048<br />

int main()<br />

{<br />

long total = 0L;<br />

void *pd;<br />

for (;;) {<br />

pd = malloc(BLOCK_SIZE);<br />

if (!pd)<br />

break;<br />

total += BLOCK_SIZE;<br />

}<br />

printf("toplam heap alanı = %ld byte\n", total);<br />

system("pause");<br />

}<br />

return 0;<br />

Yukarıdaki programı DOS işletim sistemi için önce BLOCK_SIZE simgesel değişmezinin<br />

2048 değeri ile derleyerek çalıştırın. Daha sonra programı BLOCK_SIZE değişmezinin<br />

değerini 1 yaparak yeniden derleyin ve çalıştırın. Toplam değerin çok daha küçüldüğünü<br />

göreceksiniz.<br />

327

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!