我正在阅读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
作者说: 但那对齐业务是什么?那么,在处理这种“就座分配”时,你必须小心对齐问题。
答案 0 :(得分:0)
引用链接文章:
但那对齐业务是什么?好吧,当处理这样的“坐着 分配,“你必须小心对齐问题。因为那里 没有便携的方法来确定哪些对齐要求存储 has,SmallStringOpt接受指定对齐方式的类型 将它存储在虚拟对齐变量中。
我认为这与存储模板参数有关。为了尽可能通用,该类尝试使用任何容器,即使该容器对其元素具有某些对齐要求。这可能是出于性能原因,也可能与某种体系结构的兼容性有关。关键是,没有可靠,便携的方法来确定“存储”最终的对齐要求。
因此,参数Align应该是某种类型,其大小等于Storage所需的对齐。它是联合中的虚拟变量 - 它永远不会被写入或读取。只使用它的大小。
从代码中可以看出,小字符串大小是配置的最大值和对齐中的较高者,使得对齐成为最小可配置的小字符串大小。
希望这有帮助!