Memory allocation - c programming in hindi tutorials

Dynamic memory allocation c in Hindi - dynamic memory allocation का मतलब है की किसी भी variable को program को run करते समय memory  देना और उसके साइज को define करना | 


Memory allocation c programming Hindi tutorials

Memory allocation c programming hindi tutorials

c programming में हम memory को 2 प्रकार से allocate कर सकते है | 
  1. Compile-time 
  2. run time/ dynamically allocation


compile-time memory allocation in Hindi

c programming में जब भी हम किसी user define data type के variable को declare करते है तब हम उस variable को एक specific size देते है जिसे हम compile-time memory allocation कहते है | 

Example:

int arr[10];


यहाँ पर हमने एक arr नाम के array को define किया है जिसका size 10 है इसका मतलब है की हम array में 10 से ज्यादा values को store नहीं कर सकते है क्योकि हमने array के लिए एक fixed साइज को declaration के समय ही दे दिया है इसलिए  इस type की memory allocation को हम compile time पर memory allocation करना कहते है | 

Note: किसी variable को compile-time पर memory allocate करने के बाद हम उसे बाद में बदल नहीं सकते है | 

अब मान लीजिए की हमें किसी भी कारण से किसी variable को allocate की हुई memory के size को बढ़ाना है तो हम क्या करेंगे 
ऐसे में हम dynamically memory allocation और run time memory allocation का इस्तेमाल करेंगे | 


dynamically memory allocation in Hindi

जब हम program को run करते है उस समय किसी भी user define variable की memory के size को  declare करना या उसके size को बढ़ाना dynamically memory allocation कहलाता है | 

c programming में run time पर memory को allocate करने के लिए कुछ functions होते है जिनको हम यहाँ एक एक करके समझने वाले है | 


Allocating memory using malloc() and malloc() function in Hindi

malloc और calloc function का इस्तेमाल हम user define variables को run time पर memory allocation करने के लिए करते है | 


malloc() function in Hindi 

इस function में हमें किसी variable को कितनी memory allocate करनी है उसका size input के तोर पर देनी पड़ती है | 

syntax - malloc function

data_type *pointer_name = malloc(memory_size);


Example

int arr[2];

int *myarr = malloc(sizeof(arr) * 10);


data_type: data type का मतलब है की हम किस type का pointer बना रहे है हम जब भी pointer को define करते है तो उसका data type उस variable के data type के बराबर होता है जिसका size hum malloc function से  बदल रहे है | 

जैसे की example में हमने एक integer array को define है और जब हम उस array का size malloc function से बदलते है तो उस array के data type के बराबर ही pointer का data type देना पड़ता है
जैसे की array का data type integer है और pointer का भी data type integer है | 

*pointer_name: यहाँ पर हम एक unique pointer नाम का इस्तेमाल करते है जिसका इस्तेमाल हम program में run time पर  allocate हुई memory को इस्तेमाल करने के लिए करते है जैसे की example में हमने *myarr नाम का इस्तेमाल किया है | 

malloc(sizeof(arr) * 10): यहाँ पर malloc एक function है इसके अलावा हम malloc function में input के तोर पर run time पर कितनी memory को allocate करना है वो देते है | 

जैसे की example में sizeof operator का इस्तेमाल करते हुए हमने arr के size को 10 गुना करके malloc में  input के तोर पर दिया है | 

इसका मतलब है की जब भी program run होगा तो malloc function arr की size का 10 गुना memory को allocate करेगा जैसे की arr का size 2 है उसका 10 गुना memory को allocate करेगा जिससे की अब हम array में 2 नहीं बल्कि 10 values को store कर सकते है | 


Example c program using malloc function in Hindi


#include <stdio.h>
#include <stdlib.h>

typedef struct {
  int year;
  int month;
  int day;
} date;

int main(void) {

  date *mylist = malloc(sizeof(date) * 10);

  mylist[0].year = 2012;
  mylist[0].month = 1;
  mylist[0].day = 15;

  int i;
  for (i=1; i<10; i++) {
    mylist[i].year = 2012-i;
    mylist[i].month = 1 + i;
    mylist[i].day = 15 + i;
  }

  for (i=0; i<10; i++) {
    printf("mylist[%d] = %d/%d/%d\n", i, mylist[i].day, mylist[i].month, mylist[i].year);
  }

  getch();
  return 0;
}

Output

mylist[0] = 15/1/2012
mylist[1] = 16/2/2011
mylist[2] = 17/3/2010
mylist[3] = 18/4/2009
mylist[4] = 19/5/2008
mylist[5] = 20/6/2007
mylist[6] = 21/7/2006
mylist[7] = 22/8/2005
mylist[8] = 23/9/2004
mylist[9] = 24/10/2003


Note: यहाँ पर program में हमने एक structure को define किया है जिसका size सिर्फ 3*sizeof(int) के बराबर है | 

यहाँ पर integer variable का size operating system पर निर्भर करता है किसी के operating system में  integer variable का size 2-byte होता है तो किसी में 4 byte के बराबर | 

यहाँ पर हमने malloc function के मदद से runtime पर structure के size से 10 गुना ज्यादा memory को allocate किया है इससे पहले हम structure में सिर्फ एक बार ही year, month, date को store कर सकते थे लेकिन अब हम program में run time पर year, month, date की 10 values को एक साथ store कर सकते थे | 


calloc() function in Hindi

calloc function में हमें 2 input values को argument को input के तोर पर देते है पहले argument में हम number देते है और दूसरे argument में हम memory के size को देते है | 

Note: calloc function void pointer को return करता है और जब भी हम memory को calloc से allocate करते है तब by default calloc function memory को zero से initialize कर देता है इसका मतलब है लेकिन हम बाद में उस value को change कर सकते है | 

syntax - calloc function

data_type *pointer_name = calloc(elements, sizeof(data_type));


Example

int arr[2];
int *point = calloc(10, sizeof(arr));


यहाँ पर data_type और *pointer_name बिलकुल malloc function 
में इस्तेमाल होता है वैसे ही है | 


realloc function in Hindi

realloc function का इस्तेमाल हम program में run time पर allocate हुई memory को वापस allocate करने के लिए करते है | 

syntax - realloc function

variable = realloc(variable, sizeof(data_type));


Example

double *name = calloc(3, sizeof(double));
name = realloc(name, sizeof(double)*5);



free() function in Hindi

free function का इस्तेमाल हम run time पर allocate हुई memory को deallocate करने के लिए करते है मतलब run time पर जो भी value store हुई है वो program के end होने के बाद delete हो jayegi.

syntax - free function

free(variable)


Explain: हम जिस variable को free function में input के तोर पर देंगे उस variable की value program के खतम होने पर delete हो जाएगी | 


Example program using calloc(), realloc() and free() function in Hindi


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void showVec(double vec[], int n) {
  int i;
  for (i=0; i<n; i++) {
    printf("vec[%d]=%.3f\n", i, vec[i]);
  }
  printf("\n");
}

int main(void) {

  double *vec = calloc(3, sizeof(double));

  vec[1] = 3.14;
  showVec(vec, 3);

  vec = realloc(vec, sizeof(double)*5);
  showVec(vec, 5);

  vec[3] = 7.77;
  showVec(vec, 5);

  free(vec);
  getch();
  return 0;
}


Output:

vec[0]=0.000
vec[1]=3.140
vec[2]=0.000

vec[0]=0.000
vec[1]=3.140
vec[2]=0.000
vec[3]=0.000
vec[4]=0.000


Note: program में हमने double type के variable vec की value को calloc function के इस्तेमाल से run time पर 3 गुना बढ़ाया है इसका मतलब है की अब vec variable double type की 3 value को एक साथ store कर सकता है | 

इसके बाद हमने फिर से realloc function की मदद से vec variable की value को  5 guna बढ़ाया है इसका मतलब है की  vec variable double type की 5 values को एक साथ store कर सकता है | 

इसके बाद हमने free function के मदद से vec variable को allocate हुई मेमोरी को delete किया है | 



टिप्पणी पोस्ट करें

0 टिप्पणियां