Problème de désallocation sous linux (ubuntu)
Bonjour à tous
Voici un petit programme en C, qui alloue tout simplement un tableau 2D de 200000x64 caractères, puis le désalloue.
Code:
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
|
int main() {
char** tab;
int i;
sleep(5);
printf("Allocation...\n");
tab = (char**)malloc(200000*sizeof(char*));
for(i=0; i<200000; i++)
tab[i] = (char*)malloc(64*sizeof(char));
printf("Ok\n");
sleep(7);
printf("Desallocation...\n");
for(i=0; i<200000; i++)
free(tab[i]);
free(tab);
printf("Ok\n");
sleep(20);
return 1;
} |
Je compile ce programme avec GCC sous Ubuntu, et le lance. En scruttant mon moniteur systeme pour voir la place prise par mon programme dans la mémoire vive, je note que :
pendant le premier sleep : 400 ko
pendant le deuxième sleep : 15 mo
pendant le troisième sleep : 14,2 mo !!!!!?!?!?
La désallocation se fait instantanemment, mais semble se faire très mal...
Alors où se trouve le problème ???
NB : en compilant ce meme code sous Windows avec Visual, la désallocation prend du tps, mais ce fait jusqu'au dernier octet alloué....
Merci d'avance pour vos tuyeaux !
Yagéro