2

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

<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00

我正在考虑使用Boost::Flyweight这些小的重复代码名称(如本例中的 MSFT)来优化内存分配、字符串查找/比较/复制成本。

但问题是这些字符串一开始就很小——通常只有几个字节。而现代计算机中的长类型已经是 8 个字节。Boost::Flyweight在这种情况下值得使用吗?

我的理解Boost::Flyweight是它内部化的字符串是整数以提高性能。但我认为查找/比较/复制 8 字节字符串与操作 8 字节长数据类型并没有太大区别。那么,是否值得搬家Boost::Flyweight

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

4

1 回答 1

3

Flyweight 非常通用且可配置。

我建议使用从单个固定大小的内存池(例如std::vector<CharType>)分配的字符串的支持。然后,您只需将std::string_views 返回到后备存储中的字节范围。

你可以使用 FlyWeight 来配置类似的东西,但我需要找时间来演示它。

或者,您可以“自己动手”。我在 StackOverflow 上有一些示例:

我对享元的体验各不相同(https://stackoverflow.com/search?tab=votes&q=user%3a85371%20flyweight,例如boost multi_index_container 和 slow operator++)。Flyweight 的幼稚实现似乎很少是您想要的。

更新只记得我使用完美哈希为纳斯达克股票代码制作的相关演示:是否可以将字符串映射到 int 比使用 hashmap 更快?

于 2016-10-27T13:29:39.710 回答