std::array のサイズとメモリ レイアウトは配列と同一ですか?
標準定義では std::array が連続しているにもかかわらずストレージとパフォーマンスは通常の配列と同等ですが、正確なサイズとメモリに関しては曖昧な余地が残ります。 layout.
標準要件
標準のセクション 23.3.2.1/2 では、配列は、変換可能な最大 N 個の要素を含む初期化子リストで初期化された集合体であると規定されています。 T. これは、 std::array が補助的なものを除いて、値自体を格納する必要があることを示唆しています。 data.
潜在的なバリエーション
ただし、標準では、std::array が組み込み配列と同じサイズとメモリ レイアウトを持つことを明示的に保証していません。理論的には、コンパイラは、指定されたデータの後に追加の補助データを格納したり、異なるパディングまたはアライメント ルールを適用したりできます。
スーパー アライメントに関する考慮事項
組み込み配列はスーパーをサポートできません-インテルの SSE 命令のデータなどのアライメント要件。 std::array の仕様ではスーパーアライメントが可能である可能性がありますが、明示的には保証されていません。
実装固有の影響
結論: 標準の要件は決定的に強制するものではありませんstd::array は、組み込み配列と同じサイズとメモリ レイアウトを持つ必要があります。ドキュメントでは同様にメモリ効率がよいことが示唆されていますが、依然として実装固有です。したがって、sizeof とメモリ レイアウトが同一であるという仮定に依存することはできません。
以上が`std::array` は組み込み配列と同じサイズとメモリ レイアウトを持っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。