logo

C'de dinamik bellek ayırma

Kavramı c dilinde dinamik bellek ayırma C programcısının çalışma zamanında bellek ayırmasını sağlar . C dilinde dinamik bellek tahsisi stdlib.h başlık dosyasının 4 fonksiyonu ile mümkündür.

  1. malloc()
  2. kalloc()
  3. realloc()
  4. özgür()

Yukarıdaki işlevleri öğrenmeden önce, statik bellek ayırma ile dinamik bellek ayırma arasındaki farkı anlayalım.

statik bellek ayırmadinamik bellek ayırma
Bellek derleme zamanında tahsis edilir.Bellek çalışma zamanında tahsis edilir.
program yürütülürken bellek artırılamaz.program yürütülürken bellek artırılabilir.
dizide kullanılır.bağlantılı listede kullanılır.

Şimdi dinamik bellek ayırma için kullanılan yöntemlere hızlıca bir göz atalım.

Java'yı dilimle
malloc() istenen belleğin tek bloğunu ayırır.
kalloc() istenen belleğin birden fazla bloğunu ayırır.
realloc() malloc() veya calloc() fonksiyonlarının kapladığı belleği yeniden tahsis eder.
özgür() dinamik olarak ayrılmış belleği serbest bırakır.

C'de malloc () işlevi

Malloc() işlevi, istenen belleğin tek bloğunu ayırır.

Yürütme sırasında belleği başlatmaz, bu nedenle başlangıçta çöp değeri vardır.

Bellek yeterli değilse NULL değerini döndürür.

Malloc() fonksiyonunun sözdizimi aşağıda verilmiştir:

hashmap'in dahili çalışması
 ptr=(cast-type*)malloc(byte-size) 

Malloc() fonksiyonunun örneğini görelim.

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let&apos;s see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>

C'de calloc () işlevi

calloc() işlevi, istenen belleğin birden fazla bloğunu ayırır.

java int'e kadar uzun

Başlangıçta tüm baytları sıfıra başlatır.

Bellek yeterli değilse NULL değerini döndürür.

calloc() fonksiyonunun sözdizimi aşağıda verilmiştir:

 ptr=(cast-type*)calloc(number, byte-size) 

Calloc() fonksiyonunun örneğini görelim.

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>

C'de realloc () işlevi

Malloc() veya calloc() için bellek yeterli değilse, realloc() işleviyle belleği yeniden tahsis edebilirsiniz. Kısaca hafıza boyutunu değiştirir.

10/100

Realloc() fonksiyonunun sözdizimine bakalım.

 ptr=realloc(ptr, new-size) 

C'de free() işlevi

Malloc() veya calloc() fonksiyonlarının kapladığı hafıza, free() fonksiyonu çağrılarak serbest bırakılmalıdır. Aksi takdirde programdan çıkana kadar hafıza tüketecektir.

Free() fonksiyonunun sözdizimine bakalım.

 free(ptr)