我正在实现一个存储和操纵大量重复性短弦的系统。例如股票价格系列。我将有很多的微软股价重复的条目:短弦提升轻量级
<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00
我想用Boost::Flyweight
优化内存分配,字符串查找/比较/那些小的重复股票名称的复制成本(如MSFT在这案件)。
但事情是那些字符串开头很小 - 通常只有几个字节。现代计算机中已经有8个字节的长类型。在这种情况下使用Boost::Flyweight
值得吗?
我对Boost::Flyweight
的理解是,它内部化的字符串是整数以提高性能。但是我认为查找/比较/复制一个8字节的字符串与操作一个8字节的数据类型不会有很大的不同。那么值得移植到Boost::Flyweight
的无价值?
我的主要目标是速度优化方面,而不是内存优化方面,如果我必须选择一方。
的一点想法浮现在脑海中:1)我不熟悉Boost的实现,但是我觉得像轻量级模式主要是为了节省内存,而不是速度。 2)不要忘记缓存局部性。轻量级几乎肯定会在内存的不同部分,而不是与“本地”一起工作的任何其他部分,这意味着缓存未命中。 3)如果你的编译器足够新,你应该得到一个小的字符串优化,如果它足够短,它将在栈上分配字符串。这可能会比flyweight有更大的区别。但我认为你应该运行一些测试来确保。 – 0x5453
我同意@ 0x5453在这种特殊情况下,将字符串存储为NUL终止的字符数组(例如'std :: array')可能是性能最好的。当然,这取决于分配 –
sehe
@ 0x5453的分配比例,谢谢您的回复。我觉得这应该不是一个评论的答案。 :) – CodeNoob