Ieri ho provato a utilizzare unordered_map e questo codice mi ha confuso la quantità di memoria utilizzata.std :: unordered_map utilizzo memoria molto elevato
typedef list<string> entityId_list;
struct tile_content {
char cost;
entityId_list entities;
};
unordered_map<int, tile_content> hash_map;
for (size_t i = 0; i < 19200; i++) {
tile_content t;
t.cost = 1;
map[i] = t;
}
Tutte queste parti di codice sono state compilate in MS VS2010 in modalità di debug. Quello che ho visto nel mio task manager era circa 1200 kb di processo "pulito", ma dopo aver riempito hash_map usa 8124 kb di memoria. È normale comportamento di unordered_map? Perché viene utilizzata così tanta memoria?
Volevo solo notare che una mappa non ordinata può contenere fino a centinaia di megabyte anche se nessun elemento è memorizzato all'interno (quando si cancella tramite iteratori, perché se la mappa rehash l'iteratore diventa non valido) si veda questo bug report (che può beh non influisce sull'implementazione di microsoft): https://svn.boost.org/trac/boost/ticket/11419 – GameDeveloper