Tengo un problema con la gestión de memoria con std :: string.std :: cadena de gestión de memoria
Tengo una aplicación - servidor de subprocesos múltiples con subprocesos separados (he necesitado unirme a ellos, ellos harán el trabajo y saldrán) y descubrí que después de un tiempo el uso de la memoria es bastante alto. He comenzado a experimentar dónde está el problema y he creado el programa de prueba que demuestra el problema
#include <iostream>
#include <string>
#include <pthread.h>
pthread_t thread[100];
using namespace std;
class tst {
public:
tst() {
//cout << "~ Create" << endl;
}
~tst() {
//cout << "~ Delete" << endl;
}
void calc() {
string TTT;
for (int ii=0; ii<100000; ii++) {
TTT+="abcdenbsdmnbfsmdnfbmsndbfmsndb ";
}
}
};
void *testThread (void *arg) {
int cnt=*(int *) arg;
cout << cnt << " ";
tst *TEST=new tst;
TEST->calc();
delete TEST;
pthread_exit((void *)0);
}
int main (int argc, char * const argv[]) {
cout << "---------------------------------------------------" << endl;
sleep(5);
for (int oo=0; oo<100; oo++) {
pthread_create(&thread[oo], NULL, testThread, &oo);
pthread_detach(thread[oo]);
}
cout << endl;
cout << "---------------------------------------------------" << endl;
sleep(5);
for (int oo=0; oo<100; oo++) {
pthread_create(&thread[oo], NULL, testThread, &oo);
pthread_detach(thread[oo]);
}
cout << endl;
cout << "---------------------------------------------------" << endl;
sleep(5);
exit(0);
}
después de la primera "---" el uso de la memoria es 364KB, después de la segunda de su 19 MB, después tercero es 33,5 MEGABYTE. también hay 1 cosa extraña: cada ejecución muestra un uso diferente de la memoria pero, en general, el último uso de la memoria es aproximadamente un 50% más que después del segundo "---".
esperaba que si se eliminaba la clase TEST (tst), la cadena también liberaría su memoria - encontré que los hilos no harían eso - es por eso que estoy creando un nuevo tst, ejecutándolo y luego borrar.
en mi programa esta causando un gran problema porque estoy usando no pocas cadenas en cada hilo y después de un tiempo el uso de la memoria es más ;-(concierto
¿Hay alguna opción de la forma de 'vacío' el ?. la memoria después de cadena
he intentado TTT = "" o TTT.clear() sin ningún cambio
... i necesidad de utilizar hilos - que se ejecuta en la máquina donde multicpu hilos es el única opción para usar es 'potencia total' (como sé)
¿Cómo mide uso de la memoria? –
@Doug T .: Monitor de actividad - Mac OSX –
@tominko, me pregunto si el sistema operativo no es muy agresivo para reclamar la memoria virtual que asigna. Es posible que se le asigne una cierta cantidad, pero que en realidad no la use. –