2013-09-24 11 views
-2

Mes programme charge les données des fichiers dans les structuresMémoire Linux

std::tr1::unordered_map< Key, Details*> 

et

std::tr1::unordered_map< KeyOuter, std::tr1::unordered_map<KeyInner, Details*>* > 
Key := std::string | int | long long 
Details : struct { Fields } (sizeof >=40 bytes) 

périodiquement, mon programme lit les nouvelles données de fichiers, après qu'il recycle les vieilles structures. (Un grand nombre de nouvelles/supprimer des opérations)

Dans Windows: utilisation de la mémoire après le rechargement des données ~ 200mb.

mêmes fichiers dans CentOS: utilisation de la mémoire totale après chaque augmentation de rechargement jusqu'à 1000Mo (utilisation de la mémoire: 200-> 400-> 600-> 800-> 1000-> 1000-> 1000-> 1000)

Aucune fuite n'a été détectée avec vld et valngrind.

Comment résoudre ce problème de mémoire sous Linux?

+0

Résolu. La mémoire retournée à l'appel après ** malloc_trim() ** – Jens

Répondre

2

Ceci est et non un problème. Linux garde les fichiers que vous avez lus plus tôt dans son cache, de sorte que si vous avez besoin de les lire à nouveau, vous n'avez pas besoin d'accéder au disque dur.

Cette mémoire n'est PAS perdue, elle sera libérée dès qu'un processus nécessitera plus de mémoire.

Pour plus de détails, voir http://www.linuxatemyram.com/ et des rubriques similaires sur superuser.com.

Questions connexes