Je suis nouveau à C. J'essaie de me familiariser avec malloc + gratuit. J'ai codé le test suivant mais pour une raison quelconque la mémoire n'est pas libérée complètement (le haut indique encore environ 150 Mo de mémoire allouée au traitement). Pourquoi donc?Une certaine mémoire semble être allouée après malloc() et free()
#include <stdio.h>
#include <malloc.h>
typedef struct {
char *inner;
} structure;
int main()
{
int i;
structure** structureArray;
structureArray = (structure**)malloc(sizeof(structure*)*1000*10000);
for (i = 0; i < 1000*10000;i++)
{
structureArray[i] = (structure*) malloc(sizeof(structure));
structureArray[i]->inner = (char*) malloc(sizeof(char)*1000*1000*1000);
}
printf("freeing memory");
for (i = 0; i < 1000*10000;i++)
{
free(structureArray[i]->inner);
free(structureArray[i]);
}
free(structureArray);
system("sleep 100");
return 0;
}
Makefile lui correspondant:
all: test.c
gcc -o test test.c
./test &
top -p `pidof ./test`
killall ./test
L'avez-vous testé avec la bavette à la place? ou valgrind? Ils vous donneront de meilleures statistiques de fuite de mémoire. –
Vous rendez-vous compte de la quantité de mémoire que vous essayez d'allouer? – rlbond
Qui s'en soucie? C'est un système 64 bits - l'espace d'adressage n'est pas exactement une ressource rare. Le système ne vous a jamais donné le contrôle exclusif sur la mémoire physique (RAM) de toute façon. –