为什么loki :: flex_string的SmallString Opt需要对齐

时间:2013-12-09 07:54:33

标签: c++ boost loki

我正在阅读flex_string的源代码,并且不太清楚为什么对齐是必要的,只是出于性能原因?

union
{
    mutable value_type buf_[maxSmallString + 1];
    Align align_;
};

这里是flex_string的设计文档的链接:

http://www.drdobbs.com/generic-a-policy-based-basicstring-imple/184403784#4

作者说:   但那对齐业务是什么?那么,在处理这种“就座分配”时,你必须小心对齐问题。

1 个答案:

答案 0 :(得分:0)

引用链接文章:

  

但那对齐业务是什么?好吧,当处理这样的“坐着   分配,“你必须小心对齐问题。因为那里   没有便携的方法来确定哪些对齐要求存储   has,SmallStringOpt接受指定对齐方式的类型   将它存储在虚拟对齐变量中。

我认为这与存储模板参数有关。为了尽可能通用,该类尝试使用任何容器,即使该容器对其元素具有某些对齐要求。这可能是出于性能原因,也可能与某种体系结构的兼容性有关。关键是,没有可靠,便携的方法来确定“存储”最终的对齐要求。

因此,参数Align应该是某种类型,其大小等于Storage所需的对齐。它是联合中的虚拟变量 - 它永远不会被写入或读取。只使用它的大小。

从代码中可以看出,小字符串大小是配置的最大值和对齐中的较高者,使得对齐成为最小可配置的小字符串大小。

希望这有帮助!