Я создал карту unit64_t для uint64_t. Это код, который я написал было проанализировать пространство сложности:Неупорядоченная карта, занимающая много места
#include <bits/stdc++.h>
#include "sparsehash/internal/sparseconfig.h"
#include "sparsehash/sparse_hash_map"
using namespace std;
int main(int argc, char *argv[]){
std::string input,reference;
while (getline(cin,input)) {
reference += input;
input.clear();
}
cout<<"length of reference = "<<reference.length()<<endl;
unordered_map<uint64_t, uint64_t> m;
//google::sparse_hash_map<uint64_t, pair<short,long>> m;
for (auto it = reference.begin(); it != reference.end(); it++) {
m[it-reference.begin()]= it-reference.begin();
}
return 0;
}
Когда я запускаю это с/USR/BIN/время, это выход производится по программе:
length of reference = 4641652
Command being timed: "./a.out"
User time (seconds): 2.97
System time (seconds): 0.15
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:03.13
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 251816
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 68259
Voluntary context switches: 1
Involuntary context switches: 104
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
Неупорядоченный Кажется, что карта занимает 250 МБ пространства. Это кажется необычно высоким. Почему это произойдет. Тот же код с разрешенным хешем google занимает всего 89 МБ пространства, что более разумно.
Я не понимаю, почему неупорядоченная карта C++ занимает столько места?
Я ничего не вижу, чтобы указать, что использование памяти должно быть больше или меньше 250 МБ. Почему вы думаете, что это большая память? Сколько элементов вы кладете на карту? Учитывали ли вы распределение распределения и обслуживание карты? Рассматривали ли вы предоставление нам соответствующей информации? –
Да, вход представляет собой строку размером 4.5Mb. Я помещаю каждую свою позицию в карту. – user1995120
@ user1995120: если вы сохраняете позиции в строке, которая значительно меньше 4 ГБ (максимально адресуемая с 32-разрядными номерами), и забота об использовании памяти, зачем использовать 64-битные значения? (Если вы хотите сохранить возможность обработки> строк 4 ГБ, вы все равно сможете использовать шаблоны для создания 32- и 64-разрядных версий кода и использовать оптимальный вариант во время выполнения). –