La consommation de mémoire par conteneurs STL

Je suis en train de travailler sur une application dans laquelle j'ai l'intention d'utiliser un couple de conteneurs STL. L'application permettra de prendre certaines mesures si la consommation de mémoire atteint un certain seuil. Pour ce but, j'ai besoin d'effectuer un près de calcul précis sur la quantité de mémoire utilisée par les conteneurs STL.

vector<string> StringList
map<string, int> mapstring

C'est la façon dont je suis l'estimation de la mémoire:

Pour la taille de l' StringList, en boucle sur tous les éléments du vecteur et de continuer à ajouter de la chaîne de tailles.

string size = sizeof(string) + string.capacity()*sizeof(char)

Puis enfin ajouter à cette sizeof(StringList);

Pour la taille de l'mapstring, en boucle sur toutes les touches du conteneur et continuer à ajouter de la chaîne de tailles et ajoutez ensuite la taille des int qui est mapstring.size()*sizeof(int). Puis enfin ajouter à cette sizeof(mapstring);

Je suppose une meilleure approche serait la spécification propre allocateur de classe et de conserver la trace de l'utilisation de la mémoire à l'intérieur, mais l'écriture de l'un pourrait être non négligeable. Cette estimation de bien ?

Des questions similaires: stackoverflow.com/questions/2160300/... stackoverflow.com/questions/720507/... C'est un moyen raisonnable d'obtenir un accidenté de la limite inférieure, mais il peut y avoir beaucoup plus de ressources que vous ne le pensez. Par exemple, un std::map élément doit contenir divers pointeurs, et les informations liées à la tenue de l'équilibre, ... outil Valgrind massif conserve la trace de l'allocation de tas, et peut être d'une certaine aide de profilage des programmes de l'utilisation de la mémoire.
il a également dépend de l'implémentation STL vous utilisez. par exemple, STLPort ou gcc STL
"Je suppose que la meilleure approche serait la spécification propre allocateur de classe et de conserver la trace de l'utilisation de la mémoire à l'intérieur, mais l'écriture de l'un pourrait être non négligeable." -- C'est en effet la meilleure approche, beaucoup mieux que le deuxième deviner la STL mise en œuvre.
Ne pouvez-vous pas simplement demander au système d'exploitation la quantité de mémoire utilisée par le processus?
habituellement, une demande ne sera pas consommer toute la mémoire qu'il utilise.

OriginalL'auteur Frank Q. | 2012-08-07