Я реализую систему, которая хранит и обрабатывает множество повторяющихся коротких строк. Например, серия цен акций. У меня будет много повторяющихся записей цен на акции Microsoft:Boost flyweight для коротких строк
<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00
Я имею в виду использование Boost::Flyweight
для оптимизации распределения памяти, строка подстановки/сравнения/копирования стоимость этих небольших повторяющихся имен тикер (например, MSFT в этом дело).
Но дело в том, что эти строки довольно малы для начала - обычно всего несколько байт. В то время как длинный тип - 8 байтов уже на современных компьютерах. Стоит ли использовать Boost::Flyweight
в этом случае?
Мое понимание Boost::Flyweight
заключается в том, что интернализированные строки являются целыми числами для повышения производительности. Но я думаю, что поиск/сравнение/копирование 8-байтовой строки не будет сильно отличаться от работы с 8-байтным длинным типом данных. Так стоит ли переходить на Boost::Flyweight
?
Моя основная цель - это больше на стороне оптимизации скорости, а не на стороне оптимизации памяти, если мне нужно ее выбрать.
Несколько мыслей приходят на ум: 1) Я не знаком с реализацией Boost, но я чувствую, как мухи шаблон в первую очередь предназначен для экономии памяти, а не для скорости. 2) Не забывайте о локальности кеша. Мухи почти наверняка будут в другой части памяти, чем все остальное, с которыми вы работаете «локально», а это значит, что промахи в кеше. 3) Если ваш компилятор достаточно новый, вы должны получить небольшую оптимизацию строк, которая выделяет строки в стеке, если они достаточно коротки. Это может иметь большее значение, чем мухи. Но я думаю, что вы должны выполнить некоторые тесты, чтобы быть уверенными. – 0x5453
Я согласен с @ 0x5453, что в этом конкретном случае сохранение строк в виде массивов символов с нулевым символом (например, 'std :: array') может быть лучшим для производительности. Конечно, это зависит от масштаба распределения –
sehe
@ 0x5453 спасибо за ваш ответ. Я чувствую, что это должен быть ответ, а не комментарий. :) – CodeNoob