Estoy usando un std::deque
para almacenar una cantidad bastante grande de objetos. Si elimino un montón de esos objetos, me parece que su uso de memoria no disminuye, de manera similar a std :: vector.¿Cómo liberar memoria de std :: deque?
¿Hay alguna manera de reducirlo? Sé que en un vector tienes que usar el "truco de intercambio", que supongo que también funcionaría aquí, pero prefiero evitarlo ya que requeriría copiar todos los elementos que quedan en el contenedor (y por lo tanto requiere que tengas suficiente memoria para almacenar cada objeto dos veces). No estoy íntimamente familiarizado con la implementación de deque, pero mi comprensión de esto es que podría ser posible lograr tal cosa sin muchas copias (mientras que con un vector claramente no lo es).
Estoy usando el VC++ (Dinkumware) STL, si eso hace la diferencia.
¿Ha establecido que su implementación deque no está liberando bloques de memoria tan pronto como se eliminan suficientes elementos para vaciarlos? ¿O es que realmente quieres exprimir los últimos bytes reasignando el bloque en cada extremo? –
Creo que sí, de una manera bastante difícil y rápida: agrego 100.000 elementos -> El uso de memoria es ~ 90 MB. Agrego otro 100,000 -> el uso de memoria es ~ 170MB. Elimino 100,000 elementos -> el uso de la memoria aún es ~ 170MB. Agregue otro 100,000 -> todavía 170. Supongo que 100,000 artículos es más que suficiente que tendría bloques vacíos que se liberarían si fuera necesario. – Peter
¿Uso de memoria del proceso o uso de memoria de la colección? El hecho de que la colección libere la memoria no significa que vuelva al sistema operativo, así que trate de asignar 80MB de matriz de caracteres después de eliminar los elementos, y vea si el uso va a 250MB o permanece en 170. Disculpe si ya sabe todo esto cosas y lo han contabilizado, millones no lo harían. –