为什么 loki::flex_string 的 SmallStringOpt 需要结扎

why loki::flex_string's SmallStringOpt need aligment

本文关键字:SmallStringOpt string loki flex 为什么      更新时间:2023-10-16

我正在阅读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

作者说:但Align的业务是什么?好吧,当处理这种"座位分配"时,你必须小心对齐问题

引用链接文章:

但Align的业务是什么?好吧,当处理这样的"坐着"分配,"你必须小心对齐问题。因为没有可移植的方法来确定什么是对齐要求存储具有,SmallStringOpt接受一个指定对齐方式的类型,并且将其存储在伪align_变量中。

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

因此,参数Align的大小应等于Storage所需的对齐方式。它是并集中的一个伪变量,从不写入或读取它。仅使用其大小。

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

希望这能有所帮助!