std::vector は配列と同様に動作すると一般に信じられていますが、最近のテストではこの概念に疑問が投げかけられています。この記事では、std::vector 配列とプレーン配列のパフォーマンスの違いを調べ、根本的な理由を明らかにします。
テストを実施するために、大きな配列の作成と変更を繰り返し行うベンチマークが実装されました。ピクセル オブジェクトの。テストは、std::vector とプレーン配列をシミュレートする生のポインターの 2 つの実装を使用して実行されました。
最初の結果では、std::vector がプレーン配列よりも約 3 ~ 4 倍遅いという、重大なパフォーマンスのギャップが明らかになりました。
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
この驚くべき発見により、コードを詳しく調べることになりました。明らかなパフォーマンスの違いは、ベクター内の要素を変更するには 2 回アクセスする必要があるという事実に起因していることが判明しました。1 回目はベクターのサイズ変更で、もう 1 回は要素の初期化です。
それぞれを初期化するベクター実装を最適化することで、
UseVector completed in 2.216 seconds
この改訂されたパフォーマンスは、プレーン配列のパフォーマンスと同等になりました。観察されたわずかな違いは、基礎となるデータ構造とは関係のない要因に起因する可能性があることに注意することが重要です。
結論として、std::vector は便利で汎用性の高いデータ構造ですが、そのパフォーマンスは要因によって影響を受ける可能性があります。要素が初期化されアクセスされる方法など。パフォーマンスが重要な場合は、特定の要件を慎重に検討し、プレーン配列やその他のデータ構造などの代替オプションを検討することが賢明です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3