Comment puis-je forcer mon std::map pour désallouer la mémoire utilisée?

J'utilise un std::map, et je ne peux pas me libérer de la mémoire, de retour à l'OS. Il ressemble,

int main(){
  aMap m;

  while(keepGoing){
    while(fillUpMap){
       //populate m
    }
    doWhatIwantWithMap(m);
    m.clear();//doesnt free memory back to OS

    //flush some buffered values into map for next iteration
    flushIntoMap(m);
  }
}

Chaque (fillUpmap) alloue autour de 1gig, donc je suis très intéressé par l'obtention de ce retour à mon système avant qu'il mange à tous ma mémoire.

Ive a connu la même chose avec std::vector, mais là, j'ai pu le forcer à libérer en faisant un swap avec un vide std::vector. Cela ne fonctionne pas avec la carte.

Lorsque je utiliser valgrind il est dit que toute la mémoire est libérée, donc ce n'est pas un problème de fuite, puisque tout est effacé en place bien après une course.

edit:

De la chasse d'eau qui doit apparaître après l'claire.

Notez que votre OS probablement alloue de l'espace d'adresse lorsque vous essayez d'allouer de la mémoire, mais seulement alloue réel, RAM physique lorsque vous appuyez sur la mémoire. Et si vous ne l'utilisez plus que la RAM, mais d'autres programmes en ont besoin, son contenu sera transférée sur le disque. Suite à la libération de la mémoire réellement libère de la RAM.

OriginalL'auteur monkeyking | 2010-04-13