C ++, какой контейнер использовать для хранения кеш-памяти - PullRequest
0 голосов
/ 27 ноября 2018

В настоящее время я пишу симулятор кэша и обдумываю, какой контейнер использовать для этого конкретного приложения.

Мне нужно прочитать память из файла, который содержит данные в следующем формате:

[instruction] [32 bit address] [amount of instructions since previous data memory access]

пример:

s 0x1fffff78 1

инструкция всегда 's' или 'l', а файлы находятся в диапазоне от 1 кБ до 10 МБ.

Я рассматриваю вопрос об использовании карты, поэтому я могу связать инструкцию садрес.Но насколько я знаю, карта работает не очень быстро с извлечением и вставкой, что противоречит цели кэша.

Вектор - это мой второй выбор, но это усложнит разделение трех полей.Я бы использовал вектор пар, если файлы остались маленькими, но это не так.Кроме того, поскольку мне нужно искать по адресу памяти, это не кажется правильным выбором.

Должен ли я использовать карту, вектор или есть более быстрые / лучшие альтернативы?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Легче всего программировать и использовать, вероятно, просто std::unordered_map из коробки.Если вам действительно нужно настроить каждый бит производительности, то std::vector, который вы продолжаете сортировать и использовать, например, std::lower_bound для поиска, вероятно, быстрее, даже для вставок в середине.Это потому, что линейная непрерывная память просто супер быстрая.Это может измениться в будущем, если, например, классы карты будут улучшены.

См., Например, этот пост для некоторых тестов: https://baptiste -wicht.com / posts / 2012/12 / cpp-benchmark-векторный-список-deque.html

0 голосов
/ 27 ноября 2018

Я рассматриваю вопрос об использовании карты, поэтому могу связать инструкцию с адресом.Но насколько я знаю, карта работает не очень быстро с извлечением и вставкой, что отрицательно сказывается на назначении кэша.

std::map обычно намного быстрее, чем код, который вы напишите для обработки,Это особенно верно, если вы заполняете его данными с диска. Использовать std::map.Если случается, что производительность является проблемой, профилируйте свой код и возвращайтесь с вопросом, содержащим результат вашего профилирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...