Attribution de mémoire dynamique dans C |
Quelle est attribution de mémoire dynamique ?
|
L'attribution de mémoire dynamique est définie comme dynamiquement attribution de l'espace pour des variables au temps d'exécution.
Il est inutile en traitant le type structures de rangée d'assigner tellement l'espace quand on lui déclare
|
Cinq fonction de la norme ANSI Standartd utilisée dans l'attribution de mémoire dynamique
|
La norme ANSI C fournit cinq fonctions standard qui vous aideront à assigner la mémoire sur le tas qui sont comme suit :
- sizeof()
- malloc()
- calloc()
- realloc()
- free()
|
La table suivante décrivent les cinq fonctions standard différentes que les aides vous assignent la mémoire dynamiquement
|
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 fonction de sizeof () renvoie la capacité de la mémoire de la variable demandée. Cet appel devrait être employé dans la conjonction avec l'appel de fonction de calloc (), de sorte que seulement la mémoire nécessaire soit assignée, plutôt qu'un à taille fixe. Considérer le suivant,
|
struct date {
int hour, minute, second;
};
int x;
x = sizeof( struct date );
|
|
malloc()
|
Une mémoire de mf de bloc peut être assignée en utilisant la fonction appelée le malloc. La fonction de malloc réserve un bloc de mémoire de taille indiquée et renvoie un indicateur de type vide. Ceci signifie que nous pouvons l'assigner à n'importe quel type de l'indicateur. Il prend la forme suivante :
|
ptr=(cast-type*)malloc(byte-size);
|
|
le PTR est un indicateur de type mouler-type que le malloc renvoie un indicateur (de type moulé) à un secteur de mémoire avec la byte-taille de taille. Ce qui suit est l'exemple d'employer la fonction de malloc
|
x=(int*)malloc(100*sizeof(int));
|
|
calloc()
|
Calloc est une autre fonction d'attribution de mémoire qui est normalement employée pour demander les blocs multiples de stockage chacun de la même taille et place alors tous les bytes à zéro. La forme générale de calloc est :
|
ptr=(cast-type*) calloc(n,elem-size);
|
|
Le rapport ci-dessus assigne l'espace contigu pour des blocs de n chaque taille des bytes de taille d'éléments. Tous les bytes sont initialisés à zéro et un indicateur au premier byte de la région assignée est retourné. S'il n'y a pas assez d'espace un indicateur nul est également retourné.
|
realloc()
|
La mémoire assignée en employant le calloc ou le malloc pourrait être insuffisante ou excès parfois dans les les deux les situations que nous pouvons changer la capacité de la mémoire déjà assignée avec l'aide de la fonction appelée le realloc. Ce processus s'appelle la redistribution de la mémoire. Le rapport général de la redistribution de la mémoire est :
|
ptr=realloc(ptr,newsize);
|
|
free()
|
Compiler le stockage de temps d'une variable est assigné et libéré par le système selon sa classe de stockage. Avec l'attribution d'exécution dynamique, il est de notre responsabilité de libérer l'espace quand on ne l'exige pas du tout. Quand le stockage est limité, le dégagement de l'espace mémoire devient important. Quand nous n'avons besoin plus des données que nous entreposé dans un bloc de mémoire et nous n'avons pas l'intention d'employer que le bloc pour le stockage de n'importe quelle autre information, en utilisant la fonction libre, nous peut libérer ce bloc de mémoire pour le futur usage.
|
|
ptr is a pointer that has been created by using calloc or malloc.
|
Le programme suivant illustrent la redistribution de la mémoire en utilisant le realloc () et le 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
|