2011-08-25 22 views
5

como en el título: Dado un objeto de tipo de algunos contenedor STL (por ejemplo std::vector<int> o std::set<MyClass>) Me gustaría saber su consumo de memoria --- es --- cuánta memoria se consume para almacenar los elementos, el auxiliar datos para cada elemento y el tamaño del contenedor. Supongo que los objetos almacenados no asignan ninguna memoria adicional.¿Cómo medir el consumo total de memoria del contenedor STL?

Para una std::vector<int> v puedo añadir:

sizeof(std::vector<int>) + v.capacity()*sizeof(int) 

porque los vectores no almacenan todos los datos auxiliares por elemento. Pero, ¿cómo puedo hacerlo para otros contenedores?

Puedo vivir con una complejidad de tiempo no constante.

+5

Probablemente sea mejor proporcionar su propio asignador de registro. Eso no funcionaría para el código existente, pero le permitiría seguir exactamente cuándo y cómo los contenedores asignan memoria. –

Respuesta

5

Cree su propio STL allocator y haga un seguimiento del tamaño de las solicitudes de memoria que se le hagan, luego jsut agregue el tamaño del contenedor. This article ofrece una buena visión general de la creación de uno.

Cuestiones relacionadas