我正在实现一个存储和操作大量重复短字符串的系统。例如股票价格系列。我将有很多重复的微软股票价格条目:
<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00
我正在考虑使用Boost::Flyweight
来优化内存分配,字符串查找/比较/复制那些小重复的自动收录器名称(在本例中为MSFT)。
但问题是这些字符串开头很小 - 通常只有几个字节。虽然long类型在现代计算机中已经是8个字节。在这种情况下使用Boost::Flyweight
是否值得?
我对Boost::Flyweight
的理解是内化字符串是整数以提高性能。但我认为查找/比较/复制一个8字节的字符串与在8字节长的数据类型上操作没有太大的不同。那么转移到Boost::Flyweight
是否值得呢?
我的主要目标是更多关于速度优化方面,而不是内存优化方面,如果我必须选择一个。
答案 0 :(得分:1)
Flyweight非常通用且可配置。
我建议使用从单个固定大小的内存池(例如std::vector<CharType>
)分配的字符串支持。然后,您只需要将std::string_view
返回到后备存储中的字节范围。
你可以使用FlyWeight来配置这样的东西,但是我需要抽出时间来演示它。
或者,您可以自己推动自己的&#34;。我在StackOverflow上有一些示例:
我对Flyweight的体验有所不同(https://stackoverflow.com/search?tab=votes&q=user%3a85371%20flyweight,例如boost multi_index_container and slow operator++)。似乎Flyweight的天真实现很少是你想要的。
更新刚刚记得我使用Perfect Hashing为纳斯达克股票代码制作的相关演示:Is it possible to map string to int faster than using hashmap?