Bonjour à tous

Voici un petit programme en C, qui alloue tout simplement un tableau 2D de 200000x64 caractères, puis le désalloue.

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;
}
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