1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| extern char _end;
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char * res;
int tas,rupt,esp;
printf("\n Avant toute réservation de mémoire\n --------------------------\n");
tas=sbrk(0);
printf("Position de fin du tas : %p\n",tas);
rupt=&_end;
printf("Point de rupture : %p\n",rupt);
esp=tas-rupt;
printf("Espace entre fin du tas et pdr : %d bytes \n",esp);
printf("Pages allouées pour malloc %f\n",(tas-rupt-esp)/4096.0);
printf("soit %d bytes\n",tas-rupt-esp);
int nbEntier = 0, i = 0;
int* tabEntier ; // Ce pointeur va servir de tableau après l'appel du malloc
// On demande le nombre d'entiers à l'utilisateur
printf("Combien d'entier voulez vous stockés ? ");
scanf("%d", &nbEntier);
if (nbEntier > 0)
{
tabEntier = malloc(nbEntier * sizeof(int));
if (tabEntier== 0)
{
exit(0); //
}
// On demande les entiers
for (i = 0 ; i < nbEntier ; i++)
{
printf("Entier n° %d ? ", i + 1);
scanf("%d", &tabEntier[i]);
}
// On affiche les entiers un à un
printf("\n\nVos entiers sont les suivants :\n");
for (i = 0 ; i < nbEntier ; i++)
{
printf("%d \n", tabEntier[i]);
}
tas=sbrk(0);
printf("Position de fin du tas : %p\n",tas);
rupt=&_end;
printf("Point de rupture : %p\n",rupt);
printf("Espace entre fin du tas et pdr : %d bytes \n",tas-rupt);
printf("Pages allouées pour malloc %f\n",(tas-rupt-esp)/4096.0);
printf("soit %d bytes\n",tas-rupt-esp);
free(tabEntier);
printf("\nAffichage apres free():\n");
// On affiche les âges stockés un à un
printf("\n\nVos entiers sont les suivants:\n");
for (i = 0 ; i < nbEntier ; i++)
{
printf("%d\n", tabEntier[i]);
}
}
return 0;
} |
Partager