增加短弦的轻量级

时间:2016-10-27 13:13:43

标签: c++ string performance boost boost-flyweight

我正在实现一个存储和操作大量重复短字符串的系统。例如股票价格系列。我将有很多重复的微软股票价格条目:

<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是否值得呢?

我的主要目标是更多关于速度优化方面,而不是内存优化方面,如果我必须选择一个。

1 个答案:

答案 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?