Bonjour,
Utilisant SDL et ayant un très gros programme à écrire, j'ai eu l'idée de vérifier que je n'avais pas de fuite mémoire avec ce que j'ai déjà écrit. Quelle n'a pas été ma surprise de constater que la mémoire n'arrête pas d'augmenter même si j'arrête toute animation, musique ou toute autre action dans le logiciel !
Pour en avoir le coeur net, j'ai écrit un minuscule programme qui se contente de faire une boucle sur les événements, qui gère l'action "QUIT" et qui ne fait qu'une seule chose : une instruction "SDL_Flip(screen);"
Le programme :
Et bien ce programme fait monter l'utilisation de la mémoire en permanence d'après l'outil "MallocDebug". Dès que je mets la ligne SDL_Flip en commentaire, l'utilisation de la mémoire devient stable (comportement identique avec SDL_UpdateRect).
L'augmentation de mémoire se compte en kilo-octets par secondes.
Savez-vous si c'est normal ?
MallocDebug indique-t-il quelque chose de correct ?
SDL aurait des fuites de mémoire ? Si oui, il y a-t-il un moyen de les éviter, sachant que l'objectif est d'avoir un logiciel que je pourrais utiliser pendant plusieurs heures ?
A mon boulot, j'ai entendu dire qu'Unix utilisait de la nouvelle mémoire tant qu'il en a plutôt que de réutiliser celle qu'il libère et n'utilise celle-ci que quand toute la mémoire de l'ordinateur a déjà été utilisée. Est-ce vrai ? Dans ce cas, comment savoir quelle quantité de mémoire un programme utilise vraiment ?
Utilisant SDL et ayant un très gros programme à écrire, j'ai eu l'idée de vérifier que je n'avais pas de fuite mémoire avec ce que j'ai déjà écrit. Quelle n'a pas été ma surprise de constater que la mémoire n'arrête pas d'augmenter même si j'arrête toute animation, musique ou toute autre action dans le logiciel !
Pour en avoir le coeur net, j'ai écrit un minuscule programme qui se contente de faire une boucle sur les événements, qui gère l'action "QUIT" et qui ne fait qu'une seule chose : une instruction "SDL_Flip(screen);"
Le programme :
Bloc de code:
SDL_Surface * screen;
SDL_Event event;
screen = SDL_GetVideoSurface();
int done = 0;
while (!done) {
SDL_PollEvent(&event);
switch (event.type) {
case SDL_QUIT:
done = 1;
break;
}
SDL_Flip(screen);
}
Et bien ce programme fait monter l'utilisation de la mémoire en permanence d'après l'outil "MallocDebug". Dès que je mets la ligne SDL_Flip en commentaire, l'utilisation de la mémoire devient stable (comportement identique avec SDL_UpdateRect).
L'augmentation de mémoire se compte en kilo-octets par secondes.
Savez-vous si c'est normal ?
MallocDebug indique-t-il quelque chose de correct ?
SDL aurait des fuites de mémoire ? Si oui, il y a-t-il un moyen de les éviter, sachant que l'objectif est d'avoir un logiciel que je pourrais utiliser pendant plusieurs heures ?
A mon boulot, j'ai entendu dire qu'Unix utilisait de la nouvelle mémoire tant qu'il en a plutôt que de réutiliser celle qu'il libère et n'utilise celle-ci que quand toute la mémoire de l'ordinateur a déjà été utilisée. Est-ce vrai ? Dans ce cas, comment savoir quelle quantité de mémoire un programme utilise vraiment ?