0

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

4

1 回答 1

0

引用链接的文章:

但是 Align 的业务是什么?好吧,在处理这种“就座分配”时,您必须小心对齐问题。因为没有可移植的方法来确定 Storage 的对齐要求,SmallStringOpt 接受一个指定对齐的类型并将其存储在虚拟 align_ 变量中。

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

因此,参数 Align 旨在成为某种类型,其大小等于 Storage 所需的对齐方式。它是联合中的一个虚拟变量 - 它永远不会被写入或读取。仅使用其大小。

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

希望这可以帮助!

于 2013-12-09T20:02:40.030 回答