c++ - boost 短字符串的轻量级

标签 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 的理解是,它将字符串内部化为整数以 boost 性能。但我认为查找/比较/复制一个 8 字节的字符串与操作一个 8 字节长的数据类型并没有太大的不同。那么,值得费心地转向 Boost::Flyweight 吗?

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

最佳答案

享元非常通用且可配置。

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

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

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

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

更新 只记得我使用 Perfect Hashing 为 NASDAQ 股票代码制作的相关演示:Is it possible to map string to int faster than using hashmap?

关于c++ - boost 短字符串的轻量级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40285540/

相关文章:

c++ - 远程调试C++代码

c++ - 如何使用 range-v3 压缩 vector 的 vector

string - R "str"等效于 Perl

javascript - 在 ES6 中推送和移动数组的快速方法

c++ - 在 C++ 中使用 y = mx + b 公式移动圆

r - R中的部分动物字符串匹配

Java 相当于 ruby​​ 的 "Some sentence that I need a dynamic#{value}."

performance - 具有高基数字段的 ElasticSearch 术语和基数性能

javascript - JavaScript 函数对象有多大?

c++ - MIDI 音符计数程序产生不正确的结果