ho riscontrato il seguente problema e non sono sicuro se ho torto o si tratta di un bug davvero strano. Riempio una vasta gamma di stringhe e voglio che venga cancellato a un certo punto. Ecco un esempio minimovector <string> non cancella memoria dopo lo scope
#include <string>
#include <vector>
#include <unistd.h> //sleep
#include <iostream>
int main(){
{
std::vector<std::string> strvec;
for(long i = 0; i < 1000000; ++i){
std::string out = "This is gonna be a long string just to fill up the memory used by this fucking pthread\n";
strvec.push_back(out);
}
std::cout << "finished loading 1st\n";
sleep(10); // to monitor any changes
}
std::cout << "out of scope\n";
sleep(10);
return 0;
}
il mio problema è, se a monitorare l'utilizzo della memoria con 'top', diminuisce utilizzo della memoria solo con una piccola quantità (credo che la sua, probabilmente il sovraccarico vettore), ma la maggior parte non sembra liberato. Come mai? Ho provato lo stesso scenario con "long long", ma qui è andato tutto bene.
Il riferimento std :: vector indica che, se i valori contenuti non sono puntatori, i distruttori vengono richiamati. Sembra non vero per stringa però ...
Apprezzo ogni risposta.
(per comodità: sto usando debian 64Bit linux con g ++ 4.7.2)
EDIT: Grazie per le risposte finora.
a questo punto ho un utilizzo profilato dell'heap con il vagrind massiccio e (sì, in realtà come previsto) viene correttamente liberato al punto che dovrebbe. Ma perché in effetti vedo un cambiamento nell'uso con un numero intero enorme, ma non con le stringhe (anche nella parte superiore)?
Ho bisogno di essere un po 'considerevole, perché ho bisogno di essere in grado di liberare la mia memoria in determinati momenti per un'applicazione server multithread, che probabilmente verrà eseguita diverse settimane o più senza essere riavviata. Quando so davvero quando il gestore di memoria C++ decide di restituire alcuni mem al sistema operativo?
Prova il debugging con [valgrind] (http://valgrind.org/) che ti dirà se la memoria è gratuita o meno, e probabilmente sarebbe più utile di "top". – Couchy311
Cosa c'entra con l'insistenza della gente che la memoria venga sprecata? La memoria libera non fa * niente * - non è migliore della memoria che non è nel computer. Solo la memoria che è * in uso * è utile. –