Std::mapclear() занимает слишком много времениC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Std::mapclear() занимает слишком много времени

Сообщение Anonymous »


Я создаю большой 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»