提升短字符串的轻量级
Boost flyweight for short strings
我正在实现一个存储和操作大量重复短字符串的系统。例如股票价格系列。我会有很多微软股票价格的重复条目:
<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00
我正在考虑使用 Boost::Flyweight
来优化内存分配,字符串 lookup/comparison/copying 那些小的重复代码名称(如本例中的 MSFT)的成本。
但问题是这些字符串开始时非常小——通常只有几个字节。而 long 类型在现代计算机中已经是 8 个字节。在这种情况下是否值得使用 Boost::Flyweight
?
我对Boost::Flyweight
的理解是将字符串内部化为整数以提高性能。但我认为 lookup/comparison/copying 一个 8 字节的字符串与操作一个 8 字节长的数据类型没有太大区别。那么值得搬到 Boost::Flyweight
吗?
我的主要目标更多是在速度优化方面,而不是内存优化方面,如果我必须选择一个的话。
享元非常通用且可配置。
我建议使用从单个固定大小的内存池(例如 std::vector<CharType>
)分配的字符串支持。然后,您只需要 return std::string_view
s 到后备存储中的字节范围。
你可以使用 FlyWeight 来配置这样的东西,但我需要找时间来演示它。
或者,您可以 "roll your own"。我在 Whosebug 上有一些示例:
- How to improve performance of boost interval_map lookups
- Implementing a "string pool" that is guaranteed not to move
我对 Flyweight 的体验各不相同 (https://whosebug.com/search?tab=votes&q=user%3a85371%20flyweight, e.g. boost multi_index_container and slow operator++)。似乎天真的 Flyweight 实现很少是你想要的。
UPDATE 只记得我使用 Perfect Hashing for NASDAQ 股票代码制作的相关演示:Is it possible to map string to int faster than using hashmap?
我正在实现一个存储和操作大量重复短字符串的系统。例如股票价格系列。我会有很多微软股票价格的重复条目:
<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00
我正在考虑使用 Boost::Flyweight
来优化内存分配,字符串 lookup/comparison/copying 那些小的重复代码名称(如本例中的 MSFT)的成本。
但问题是这些字符串开始时非常小——通常只有几个字节。而 long 类型在现代计算机中已经是 8 个字节。在这种情况下是否值得使用 Boost::Flyweight
?
我对Boost::Flyweight
的理解是将字符串内部化为整数以提高性能。但我认为 lookup/comparison/copying 一个 8 字节的字符串与操作一个 8 字节长的数据类型没有太大区别。那么值得搬到 Boost::Flyweight
吗?
我的主要目标更多是在速度优化方面,而不是内存优化方面,如果我必须选择一个的话。
享元非常通用且可配置。
我建议使用从单个固定大小的内存池(例如 std::vector<CharType>
)分配的字符串支持。然后,您只需要 return std::string_view
s 到后备存储中的字节范围。
你可以使用 FlyWeight 来配置这样的东西,但我需要找时间来演示它。
或者,您可以 "roll your own"。我在 Whosebug 上有一些示例:
- How to improve performance of boost interval_map lookups
- Implementing a "string pool" that is guaranteed not to move
我对 Flyweight 的体验各不相同 (https://whosebug.com/search?tab=votes&q=user%3a85371%20flyweight, e.g. boost multi_index_container and slow operator++)。似乎天真的 Flyweight 实现很少是你想要的。
UPDATE 只记得我使用 Perfect Hashing for NASDAQ 股票代码制作的相关演示:Is it possible to map string to int faster than using hashmap?