Для каждого элемента в data1
мне нужно выяснить, какие элементы в data2
связаны с ним. Кроме того, для каждого элемента в data2
мне нужно выяснить, какие элементы в data1 связаны с ним. Поэтому я настраиваю взаимную структуру данных, как вы можете видеть ниже:
01 class data1 {
02 // class variables
03 int id;
04 float d1_v1;
05 float d1_v2;
06 map<string, float> m_to_data2; // string is the keyword of data2, float recorded the reference info when data1 and data2 are related.
07 };
08
09 class data2 {
10 // class variables
11 int d2_v1;
float d2_v2;
12 list <int> src_id; // int is the id of data1
13 };
14
15 map<string, data2 *> map_2;
16 map<int, data1 *> map_1;
Затем я анализирую файл и заполняю map_1 и map_2. Я нашел:
общее использование памяти после настройки двух взаимосвязанных карт: 498,7M.
без установки ссылки между данными2 на данные1 (без заполнения list <int> src_id
), использование памяти: 392,7M.
Без карты заполнения_1, без заполнения list <int> src_id
в данных2, использование памяти: 182,0M
Без заполнения map_1, заполните list <int> src_id
идентификаторами данных1, использование памяти: 289,7M
без карты заполнения m_to_data2, использование памяти: 290,0M
Размер карты_1: 77737
Размер карты_2: 1830009
Размер map<string, float>
m_to_data2 для каждого элемента map_1 в диапазоне 3 - 17522
Размер list <int> src_id
для каждого элемента map_2 в диапазоне 1-1377
Мне нужно уменьшить использование памяти после настройки взаимно связанных карт (в идеале менее 200M, в настоящее время 498M, как вы можете видеть выше). Я пытался разметить строку (ключевое слово data2) на int, установив дополнительный map <string, int>
, поскольку int требует меньше памяти, чем string, но это может не сильно помочь, так как мне нужна дополнительная память для map <string, int>
. Есть предложения?
Ваши комментарии / предложения высоко ценятся.