7 Mart 2017 Salı

Statik Dizi ve Dinamik Dizi

Statik Dizi
Bir C programı içerisinde, dizilerin boyutu ve kaç elemanlı olduğu program başında belirtilirse, derleyici o dizi için gereken bellek alanını (bölgesini) program sonlanıncaya kadar saklı tutar ve bu alan başka bir amaç için kullanılamaz.
Bu türdeki diziler statik dizi olarak adlandırılırlar.
Statik dizinin boyutu programın çalışması esnasında (run time) değiştirilemez.


Dinamik Dizi

Programın çalışırken bir dizinin boyutu ve eleman sayısı bazı yöntemler kullanılarak değiştirilebilir.
Bu tür dizilere dinamik dizi denir.
Dinamik diziler için gereken bellek bölgesi, derleyici tarafından
işletim sisteminden istenir,
kullanılır ve
daha sonra istenirse bu bölge boşaltılır.

Örneğin:
char ad[20];

İfadesinde derleyici, bellekten 20 byte boyutunda sürekli bir alan tahsis edecektir.
Bu yer tahsisi, program başlatılmadan önce yapılmaktadır.
Yani program çalışırken bu dizinin boyutunu değiştirmeniz mümkün değildir.
Fakat bazı durumlarda (genelde ?) bellekten boyutu sabit olmayan ve sürekli değişebilen yerler tahsis etmemiz gerekecektir.


Örneğin:
Telefon rehberi yazılımı geliştirmek için bellekten tahsis edeceğiniz bölgenin boyutunu önceden tahmin edebilir misiniz?
Her yeni telefon eklentisinde bellekte ayırdığınız yeri büyüterek belleği en verimli şekilde kullanmak durumundasınız.
Yani dinamik bellek yönetimi ile programın çalışma zamanı sırasında (Run-Time)-işletim sistemine danışarak- sürekli bellek bölgeleri tahsis ederiz.



int *dizi; /* dinamik dizi bildirimi */
scanf("%d",&n); /* eleman saysını belirle */

/* n tane bellek bloğu isteniyor */
dizi = (int *) malloc( sizeof(int)*n );

/* Boş yer varmı sorgulanıyor */
if( dizi == NULL )
  printf("Yetersiz bellek alanı\n"), exit(1);
     ...
/* dizi burada kullanılıyor */
/* bellek bloğu boşaltılıyor */
free(dizi);