¿Cómo podemos encontrar la memoria utilizada (en bytes) por el término objetos y termsMap. ¿Tenemos alguna biblioteca?
Debe usar su propio tipo de asignador.
typedef std::set<string,
your_allocator_1_that_can_count_memory_consumption_t> Terms;
typedef std::map<string, std::pair<int,Terms>,
your_allocator_2_that_can_count_memory_consumption_t> TermMap;
typedef std::multimap<int, string, greater<int>,
your_allocator_3_that_can_count_memory_consumption_t> TermsMap;
que aún no han comprobado esta idea para std :: string lo que si es difícil de poner en práctica sólo tiene que utilizar su propio fixed_string clase que simplemente se envuelve s char [-serie-máx Longitud].
Y cuando se necesita en su programa para averiguar el consumo de memoria acaba de obtener de your_allocator_1_that_can_counts_memory_consumption_t
, your_allocator_2_that_can_counts_memory_consumption_t
, your_allocator_3_that_can_counts_memory_consumption_t
.
Editado
Para UncleBens quiero aclarar mi punto.
Por lo que entiendo por la cuestión del ARV, es necesario saber cuánta memoria se asigna para set :: set y std :: map, incluida toda la memoria asignada para los elementos del conjunto y el mapa. Entonces no es solo sizeof (términos).
Así que acabo de sugerir un asignador muy simple. Sin entrar en demasiados detalles que podría tener este aspecto:
template <class T>
class your_allocator_1_that_can_counts_memory_consumption_t {
public:
// interfaces that are required by the standart
private:
std::allocator<T> std_allocator_;
// here you need to put your variable to count bytes
size_t globale_variable_for_allocator_1_to_count_bytes_;
};
Este asignador simplemente cuenta el número de bytes asignados y desasignado y para la asignación real y cancelación de asignación utilice su std_allocator_ miembro. Necesitaría depurarlo bajo gdb para establecer un punto de interrupción en malloc() y en free() para asegurarme de que cada asignación y desasignación en realidad pasan por mi asignador.
Estaría agradecido si me señala algunos problemas con esta idea ya que ya la he implementado en mi programa que se ejecuta en Windows, Linux y HP-UX y simplemente pregunto mis asignaturas para encontrar cuánta memoria cada uno de mis contenedores usa
'sizeof' es un operador, no una función. –
@Carl Norum: está bien. ¡Gracias por el recordatorio! –
Hmm. Esto no parece funcionar, por dos razones: los miembros son privados, y no se le permite tomar el tamaño de una variable miembro no estática. ¡Interesante! –