Bonjour à tous
Voici un petit programme en C, qui alloue tout simplement un tableau 2D de 200000x64 caractères, puis le désalloue.
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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
Partager