配列のベクトルは連続していますか?
私が作成した場合
std::vector<std::array<double, 2>> points;
std::vector<double> points2;
points2は、ヒープ内にdoubleを保持するメモリの連続したチャンクになることを私は知っています。ポイントはスタックに対してdouble *のメモリの連続したチャンクになると思いますか?しかし、それらの配列はスタック内で連続していますか?いくつかのポイントを表すために、doubleのペアを格納しているとしましょう。
points2は次のようにメモリにあります:[x0 y0 x1 y1 x2 y2 ...]ポイントはどうですか?この場合、ダブルのペアを保存するための最良の方法は何ですか?ヒントをありがとう。
回答
2 DanielLangr
配列のベクトルは連続していますか?
いいえそうではありません。std::array
最後にパディングまたは追加のメンバーを含めることができます。詳細、例えばここ:
- ネストされたstd :: arrayのデータは連続していることが保証されていますか?
- std :: arrayのサイズは標準で定義されていますか
しかし、これが発生する可能性は非常に低いと思います。と比較することで2 * sizeof(double)
、このような状況を簡単に確認できますsizeof(std::array<double, 2>)
。