2009-10-09 7 views
0

J'ai une fuite de mémoire quelque part, mais il ne semble pas être liée à mon programme. Je fais cette déclaration audacieuse basée sur le fait qu'une fois que mon programme se termine, soit par seg-faulting, soit en quittant, ou en abandonnant, la mémoire n'est pas récupérée. Si mon programme était le coupable, je supposerais que le MMU récupérerait tout, mais cela ne semble pas être le cas.Fuite de mémoire ARM/Linux: un programme utilisateur peut-il conserver la mémoire après la fin?

Ma question est:

Sur un petit système Linux (64 Mo de RAM) en cours d'exécution d'un programme qui utilise la pile que la mémoire et quelques appels à malloc(), ce qui cause que je peux regarder voir trop la mémoire en cours d'exécution vers le bas et rester en bas une fois mon programme se termine?

Une question connexe est here:


Tout cela a commencé quand après le code en question dirigeait son stdout, stderr dans un fichier. Après quelques heures, il a avorté avec une "erreur de segmentation". Un rapide (naïf?) Regarder/proc/meminfo a montré qu'il n'y avait pas beaucoup de mémoire disponible, donc j'ai supposé que quelque chose fuyait.

+0

Pouvez-vous expliquer ce que vous voyez qui vous fait croire qu'un programme conserve la mémoire après la fin. Je devine que vous interprétez mal une autre situation. –

+0

C'est aussi ce que je pense. On m'a récemment montré que la mémoire était mise en cache par la couche de blocs. – Jamie

Répondre

0

Il semble que je n'ai pas une fuite de mémoire (voir here), mais il ne me conduire à de nouvelles questions ...


Il se trouve que l'écriture pour bloquer les périphériques peuvent utiliser un assez pile de mémoire physique; Dans mon système, il n'y avait que 64 Meg, donc écrire des centaines de Megs sur une clé USB augmentait considérablement les pools de mémoire cache, active et inactive.

Ces pools de mémoire sont immédiatement libérés dans le pool de mémoire libre lorsque le périphérique est démonté. La cause exacte de ma faute de segmentation reste un petit mystère, mais je sais que son occurrence peut être réduite en comprenant mieux les ressources de mémoire virtuelle, en particulier autour de l'utilisation des périphériques de bloc.