Differenza tra Malloc e Realloc nella programmazione C

Differenza tra Malloc e Realloc nella programmazione C
Il malloc () e il realloc (); Entrambe le funzioni sono utilizzate per l'allocazione dinamica della memoria e in questo articolo, discuteremo del confronto di entrambi; Realloc () e Malloc () funzionano in dettaglio. Ma prima di capire queste funzioni, discutiamo la differenza tra memoria statica e dinamica nella programmazione C.

Nella programmazione C, quando eseguiamo un programma, occupa un po 'di memoria sul sistema. Se utilizziamo la memoria statica, dobbiamo assegnare un blocco di memoria fissa dal sistema, quindi dopo l'esecuzione del programma, possono verificarsi due scenari; Il programma avrà bisogno di una dimensione del blocco maggiore rispetto alle dimensioni dichiarate o avrà bisogno del blocco di memoria di dimensioni più piccole. Se il blocco di memoria diventa inferiore per il programma eseguito, i risultati non saranno precisi e se la dimensione del blocco è maggiore per il programma eseguito, la memoria libera rimanente del blocco non è utile.

Per evitare questo, si preferisce utilizzare la memoria dinamica nella programmazione C che ha diversi tipi di funzioni.

Cos'è una funzione Malloc () nella programmazione C

Nella programmazione C, se utilizziamo la memoria statica, non possiamo modificare la dimensione della memoria durante l'esecuzione del programma. È una pratica consigliata utilizzare la memoria dinamica nella programmazione C in modo che la dimensione della memoria possa essere modificata durante l'esecuzione del programma.

Per l'uso della memoria dinamica, dobbiamo includere un file di intestazione “Stdlib.H", che include tutte le funzioni della memoria dinamica. Il malloc () è anche membro di stdlib.Biblioteca H e viene utilizzato per assegnare la memoria al programma eseguito. Quando una funzione Malloc () viene chiamata in un programma, invia una richiesta al mucchio del sistema, che assegna il blocco di memoria richiesto alla funzione Malloc () o restituirà un valore nullo se non c'è spazio sufficiente sul mucchio.

Malloc () richiede il blocco di memoria in base alla necessità del programma eseguito e quando il programma viene eseguito correttamente, possiamo restituire il blocco di memoria sul heap utilizzando la funzione Free (), quindi può essere utilizzato per l'esecuzione di altre istruzioni.

La sintassi generale della funzione Malloc () è:

ptr_name = (cast-type*) malloc (dimensione);

La spiegazione della sintassi sopra è semplice:

  • Possiamo usare qualsiasi nome per il puntatore (il puntatore viene utilizzato per archiviare gli indirizzi)
  • Quindi dobbiamo dichiarare il tipo di dati o il tipo di cast per il puntatore come int e char
  • E infine usando la funzione Malloc () e all'interno della funzione, dobbiamo menzionare le dimensioni della memoria necessaria

Per una migliore comprensione, considereremo un esempio, crea un file con il nome di Mal_txt.C e digitare il seguente script:

#includere
#includere
int main ()
int a = 4, i, *ptr, s = 0;
ptr = (int *) malloc (a * sizeof (int));
if (ptr == null)
printf ("\ nerror! memoria non assegnata.");
uscita (0);

printf ("\ nenter Elements of Array:");
per (i = 0; i< a; ++i)
scanf ("%d", ptr + i);
s + = *(ptr + i);

printf ("\ nsum: %d", s);
printf ("\ n");
restituzione 0;

Per compilare il MAL_TXT.F del file, utilizziamo il compilatore GCC:

$ GCC MAL_TXT.c -o mal_txt

Una volta compilato correttamente il file senza alcun errore, eseguire il codice utilizzando il comando:

$ ./mal_txt

Nel codice sopra, stiamo creando l'array e stampando la somma degli elementi dell'array. Una spiegazione dettagliata del programma sopra è:

  • Abbiamo incluso le due biblioteche; stdlib.H Per l'uso di funzioni di memoria dinamica e stdio.H per le funzioni di input e output
  • Abbiamo dichiarato quattro variabili a, s, i e *p dove " *" è usato con "p" perché è un puntatore e memorizzare la posizione anziché le variabili
  • Abbiamo impiegato la funzione Malloc () e abbiamo usato la dimensione di una variabile "A", il che significa che richiederà la memoria dal mucchio in base alle dimensioni di "A" e il puntatore "P" andrà all'inizio della memoria assegnato
  • Quindi abbiamo usato l '"istruzione if", se il heap non ha avuto sufficiente memoria, restituirà il valore null, in questo caso mostra semplicemente "errore! memoria non assegnata."Utilizzo della funzione printf ()
  • Se viene assegnata la memoria, con l'aiuto della funzione scanf () prenderà quattro elementi dall'utente, calcola la sua somma e salvala in "s"
  • Infine, visualizzerà il valore di "s" che è la somma di tutti gli elementi dell'array

Cos'è una funzione realloc () nella programmazione C

Un'altra funzione della memoria dinamica è la funzione realloc (), viene utilizzata per modificare il blocco di memoria assegnato alla funzione Malloc (). La funzione Malloc () come discusso sopra richiede un blocco di memoria dal heap, ma per modificare la dimensione del blocco di memoria in modo da utilizzare la funzione realloc () invece di eliminare l'intero blocco di memoria e rideclaring manualmente.

La funzione realloc () è la forma corta di "riallocazione della memoria" e viene utilizzata per ridimensionare la dimensione del blocco della memoria assegnata dal heap alla funzione Malloc () o caloc (). Non disturba il contenuto originale del blocco di memoria e richiede il nuovo blocco di memoria dal heap e copia tutti i dati dal vecchio blocco di memoria al nuovo blocco di memoria senza disturbarne alcun contenuto.

La sintassi generale dell'utilizzo della funzione realloc () è:

$ ptr = realloc (ptr, notize);

La spiegazione della sintassi sopra è:

  • Utilizzare la variabile puntatore utilizzata con la funzione Malloc ()
  • Utilizzare la funzione realloc () con i parametri; Nome puntatore e nuove dimensioni che vuoi assegnarlo

Ancora una volta creeremo un file, real_file.C, e scrivi il codice in esso per una migliore comprensione dell'uso della funzione realloc ():

#includere
#includere
int main ()
int *ptr;
PTR = Malloc (200);
if (ptr == null)
printf ("La memoria non è allocata.");
uscita (0);

PTR = realloc (PTR, 400);
if (ptr!= Null)
printf ("La memoria ha allocato correttamente \ n");
restituzione 0;

Ora compila il Real_File.C usando il compilatore GCC:

$ GCC REAL_FILE.c -o real_file

Se il file viene compilato correttamente, eseguire il programma usando il comando:

$ ./real_file

La spiegazione della sceneggiatura sopra è:

  • Abbiamo incluso due file di intestazione; stdlib.H per le funzioni di memoria dinamica e stdio.H per le funzioni di input e output
  • Dichiarazione della variabile puntatore *PTR
  • Usato la funzione Malloc () e ha richiesto al heap di assegnare 200 byte, se la memoria non è assegnata dal heap, "La memoria non è allocata."Verrà visualizzato utilizzando la funzione printf ()
  • Se viene assegnata la memoria, verrà alla funzione realloc () e ridimensionerà la memoria da 100 byte a 400 byte
  • Se il heap lo ha assegnato la memoria di 500 byte; Visualirà la ("La memoria ha creato correttamente")

Conclusione

Nella programmazione C, l'allocazione della memoria dinamica è l'allocazione manuale della memoria in base al requisito del programma. Le funzioni Malloc () e Realloc () fanno parte della memoria dinamica; Malloc () viene utilizzato per l'allocazione della memoria e realloc () viene utilizzato per la riallocazione della memoria. In questo articolo, abbiamo spiegato entrambi; funzioni di malloc () e realloc (), come funzionano e qual è la sintassi generale dell'utilizzo di entrambi. Infine, per una migliore comprensione, abbiamo eseguito gli esempi di entrambe le funzioni.