Ripartizione di memoria dinamica in C |
Che cosa è ripartizione di memoria dinamica?
|
La ripartizione di memoria dinamica è definita dinamicamente come la ripartizione di spazio per le variabili a tempo di esecuzione.
È dispendioso quando riguardo al tipo strutture di Array assegnare così tanto lo spazio quando è dichiarato
|
Cinque funzione dell'ANSI Standartd usata nella ripartizione di memoria dinamica
|
L'ANSI C fornisce cinque funzioni standard che li aiuteranno ad assegnare la memoria sul mucchio che sono come segue:
- sizeof()
- malloc()
- calloc()
- realloc()
- free()
|
La seguente tabella descrive le cinque funzioni standard differenti che gli aiuti voi assegnano la memoria dinamicamente
|
Function |
Task |
sizeof |
The sizeof() function returns the memory size of the requested variable |
malloc |
Allocates memory requests size of bytes and returns a pointer to the Ist byte of
allocated space |
calloc |
Allocates space for an array of elements initializes them to zero and returns a pointer to the
memory |
free |
Frees previously allocated space |
realloc |
Modifies the size of previously allocated space. |
|
sizeof()
|
La funzione del sizeof() restituisce la capacità di memoria della variabile chiesta. Questa chiamata dovrebbe essere usata nella congiunzione con la chiamata di funzione del calloc (), di modo che soltanto la memoria necessaria è assegnata, piuttosto che in un di misura stabilita. Considerare quanto segue,
|
struct date {
int hour, minute, second;
};
int x;
x = sizeof( struct date );
|
|
malloc()
|
Una memoria di mf del blocco può essere assegnata usando la funzione denominata malloc. La funzione del malloc riserva un blocco della memoria del formato specificato e restituisce un indicatore di tipo vuoto. Ciò significa che possiamo assegnarli a qualunque tipo dell'indicatore. Prende la seguente forma:
|
ptr=(cast-type*)malloc(byte-size);
|
|
lo stampante è un indicatore di tipo lanci-tipo che il malloc restituisce un indicatore (di tipo fuso) ad una zona della memoria con il byte-formato di formato. Ciò che segue è l'esempio di usando la funzione del malloc
|
x=(int*)malloc(100*sizeof(int));
|
|
calloc()
|
Calloc è un'altra funzione di ripartizione di memoria che è usata normalmente per chiedere i blocchi multipli di immagazzinaggio ciascuno dello stesso formato ed allora regola tutti i byte a zero. La forma generale di calloc è:
|
ptr=(cast-type*) calloc(n,elem-size);
|
|
La suddetta dichiarazione assegna lo spazio attiguo per i blocchetti di n ogni formato dei byte di formato degli elementi. Tutti i byte sono inizializzati a zero e un indicatore al primo byte della regione assegnata è restituito. Se ci non è abbastanza spazio un indicatore nullo inoltre è restituito.
|
realloc()
|
La memoria assegnata usando il calloc o il malloc potrebbe essere insufficiente o eccesso a volte nelle entrambe situazioni che possiamo cambiare la capacità di memoria già assegnata con l'aiuto della funzione denominata realloc. Questo processo è denominato lo nuovo stanziamento della memoria. La dichiarazione generale di nuovo stanziamento della memoria è:
|
ptr=realloc(ptr,newsize);
|
|
free()
|
Compilare l'immagazzinaggio di tempo di una variabile è assegnato e liberato dal sistema in conformità con il relativo codice categoria di immagazzinaggio. Con la ripartizione runtime dinamica, è la nostra responsabilità di liberare lo spazio quando non è richiesto affatto. Quando l'immagazzinaggio è limitato, il rilascio dello spazio di immagazzinaggio diventa importante. Quando più non abbiamo bisogno dei dati che memorizziamo in un blocco della memoria e non intendiamo usare che il blocco per memorizzare qualunque altre informazioni, usando la funzione libera, noi può liberare quel blocco della memoria per uso futuro.
|
|
lo stampante è un indicatore che è stato generato usando il calloc o il malloc.
|
Il seguente programma illustra lo nuovo stanziamento della memoria usando il realloc()e il malloc()
|
/*Example program for reallocation*/
#include< stdio.h >
#include< stdlib.h >
define NULL 0
main()
{
char *buffer;
/*Allocating memory*/
if((buffer=(char *) malloc(10))==NULL)
{
printf("Malloc failed\n");
exit(1);
}
printf("Buffer of size %d created \n",_msize(buffer));
strcpy(buffer,Bangalore);
printf(\nBuffer contains:%s\n,buffer);
/*Reallocation*/
if((buffer=(char *)realloc(buffer,15))==NULL)
{
printf("Reallocation failed\n");
exit(1);
}
printf("\nBuffer size modified".\n);
printf("\nBuffer still contains: %s\n",buffer);
strcpy(buffer,Mysore);
printf("\nBuffer now contains:%s\n",buffer);
/*freeing memory*/
free(buffer);
}
|
|
|
|
Keywords:
Dynamic Memory Allocation in C,
dynamic memory allocation in c++,
c arrays,
c tutorial,
c array,
void c,
c syntax,
unix memory,
value allocation,
c language,
return c,
memory type,
dynamic example,
dynamic algorithm,
dynamic tutorial,
c example,
c algorithm,
variable c,
c type,
c program,
memory size,
unix c
|