Std::mapclear() занимает слишком много времени ⇐ C++
-
Anonymous
Std::mapclear() занимает слишком много времени
Я создаю большой std::map, содержащий специальную структуру. Эта структура имеет множество элементов std::vector. Выполнение clear() объекта карты занимает много времени.
Пример кода, который я выполнил, занимает более 80 % оперативной памяти. Я подозреваю, что эта проблема связана с подкачкой памяти, но даже если это так, я не понимаю, почему удаление содержимого std::map занимает так много времени.
Кто-нибудь может подсказать, что происходит?
Ниже приведен пример кода, который на моей машине занимает примерно 100–110 секунд:
#include #include #include #include #include структура MyStruct { std::vector vi01; std::vector vi02; std::vector vi03; std::vector vi04; std::vector vi05; std::vector vi06; std::vector vi07; std::vector vi08; std::vector vi09; std::vector vi10; std::vector vi11; std::vector vi12; std::vector vi13; std::vector vi14; std::vector vi15; std::vector vi16; std::vector vi17; std::vector vi18; std::vector vi19; std::vector vi20; std::vector vs01; std::vector vs02; std::vector vs03; std::vector vs04; std::vector vs05; std::vector vs06; std::vector vs07; std::vector vs08; std::vector vs09; std::vector vs10; std::vector vs11; std::vector vs12; std::vector vs13; std::vector vs14; std::vector vs15; std::vector vs16; std::vector vs17; std::vector vs18; std::vector vs19; std::vector vs20; }; интервал основной() { std::map sId_MyStruct{}; // примерно 500 * 7 000 * 2 000 = 7 000 000 000 байт (7 ГБ) // но емкость std::vector() будет больше. for (int64_t i=10'000ULL; i < 10'000ULL+7'000ULL ; ++i) { std::string sId = std::to_string(i); MyStruct и myStruct = sId_MyStruct[sId]; for (int64_t j=10'000ULL; j
Я создаю большой std::map, содержащий специальную структуру. Эта структура имеет множество элементов std::vector. Выполнение clear() объекта карты занимает много времени.
Пример кода, который я выполнил, занимает более 80 % оперативной памяти. Я подозреваю, что эта проблема связана с подкачкой памяти, но даже если это так, я не понимаю, почему удаление содержимого std::map занимает так много времени.
Кто-нибудь может подсказать, что происходит?
Ниже приведен пример кода, который на моей машине занимает примерно 100–110 секунд:
#include #include #include #include #include структура MyStruct { std::vector vi01; std::vector vi02; std::vector vi03; std::vector vi04; std::vector vi05; std::vector vi06; std::vector vi07; std::vector vi08; std::vector vi09; std::vector vi10; std::vector vi11; std::vector vi12; std::vector vi13; std::vector vi14; std::vector vi15; std::vector vi16; std::vector vi17; std::vector vi18; std::vector vi19; std::vector vi20; std::vector vs01; std::vector vs02; std::vector vs03; std::vector vs04; std::vector vs05; std::vector vs06; std::vector vs07; std::vector vs08; std::vector vs09; std::vector vs10; std::vector vs11; std::vector vs12; std::vector vs13; std::vector vs14; std::vector vs15; std::vector vs16; std::vector vs17; std::vector vs18; std::vector vs19; std::vector vs20; }; интервал основной() { std::map sId_MyStruct{}; // примерно 500 * 7 000 * 2 000 = 7 000 000 000 байт (7 ГБ) // но емкость std::vector() будет больше. for (int64_t i=10'000ULL; i < 10'000ULL+7'000ULL ; ++i) { std::string sId = std::to_string(i); MyStruct и myStruct = sId_MyStruct[sId]; for (int64_t j=10'000ULL; j
Мобильная версия