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
|