Bonjour,
J'ai besoin dans mon programme d'une matrice de booleens de taille 256*256*256.

La taille en mémoire serait donc de 2Mo.

Or quand je compare la phase d'initialisation de mon programme, j'ai un écart de 33Mo environ lorsque j'ajoute la matrice. (donnée calculée avec le gestionnaire des tâches en tenant compte de la mémoire virtuelle)

Sans matrice: 5,8Mo + 3,4 dans la MV
Avec matrice 22,3Mo + 19,6 dans la MV


Voici comment je crée la matrice:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
bool table[256][256][256];
J'ai essayé une autre méthode avec les malloc mais ca prend meme quelques Mo de plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
bool*** table;
//Allocation et initialisation du tableau de booleens
	table = (bool***) malloc(256*sizeof(bool**));
	for (int i=0; i<256; i++) {
		table[i] = (bool**) malloc(256*sizeof(bool*));
		for (int j=0; j<256; j++) {
			table[i][j] = (bool*) malloc(256*sizeof(bool));
			for (int k=0; k<256; k++) {
				table[i][j][k] = 0;
 
			}
		}
	}
D'autre la création naïve bool table[256][256][256]; prendrait un espace de mémoire contiguë. N'y a t'il pas un risque de bug si la mémoire est trop fragmentée au moment de l'utilisation? (à moins que le système est assez inteligent pour ranger la mémoire si besoin)

Que faire car c'est quand meme pas top cette utilisation excessive mémoire!

Merci d'avance pour votre aide