c++ 为什么loki::flex_string的SmallStringOpt需要对齐

nle07wnf  于 2023-08-09  发布在  Go
关注(0)|答案(1)|浏览(97)

我正在阅读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业务?那么,在处理这种“座位分配”时,您必须小心对齐问题。

omqzjyyz

omqzjyyz1#

引用自链接文章:
但Align是什么生意那么,在处理这种“座位分配”时,你必须小心对齐问题。因为没有可移植的方法来确定Storage具有什么对齐要求,所以SmallStringOpt接受指定对齐的类型并将其存储在伪align_变量中。
我相信这与存储模板参数有关。为了尽可能通用,类尝试使用任何容器,即使该容器对其元素有某些对齐要求。这可能是出于性能方面的原因,也可能是与某个体系结构的兼容性有关。问题是,没有可靠的、便携式的方法来确定任何“存储”最终的对齐要求。
因此,参数Align旨在成为其大小等于存储所需的对齐的某种类型。它是联合体中的一个虚拟变量-它永远不会被写入或读取。仅使用其大小。
从代码中可以看出,小字符串大小是配置的最大值和对齐中的较高者,使对齐成为可配置的最小小小字符串大小。
希望这对你有帮助!

相关问题