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

著者は言った: しかし、そのアライン事業とは何ですか?さて、このような「着席割り当て」を扱うときは、位置合わせの問題に注意する必要があります。

4

1 に答える 1

0

リンクされた記事からの引用:

しかし、そのアライン事業とは何ですか?さて、このような「着席割り当て」を扱うときは、位置合わせの問題に注意する必要があります。Storage が持つアラインメント要件を把握する移植可能な方法がないため、SmallStringOpt はアラインメントを指定する型を受け入れ、それをダミーの align_ 変数に格納します。

これは Storage テンプレート パラメーターに関係していると思います。可能な限り汎用性を持たせるために、クラスは、コンテナーがその要素に対して特定の配置要件を持っている場合でも、任意のコンテナーと連携しようとします。これは、パフォーマンス上の理由による場合もあれば、特定のアーキテクチャとの互換性に関する場合もあります。重要なのは、最終的に「ストレージ」が何であれ、アライメント要件を確認するための信頼できるポータブルな方法がないということです。

したがって、パラメーター Align は、サイズが Storage で必要なアライメントと等しいタイプになることを意図しています。これは共用体のダミー変数であり、書き込みも読み取りもされません。そのサイズのみが使用されます。

コードからわかるように、小さな文字列のサイズは、構成された最大値と配置のいずれか大きい方であり、配置は構成可能な小さな文字列の最小サイズになります。

お役に立てれば!

于 2013-12-09T20:02:40.030 に答える