2016-04-19 33 views
1

私は、他の学生が本当に何かのオブジェクトのフィールドでなければならないものの要素のためにたくさんの配列を使いたいと気づきました。配列/ベクトルの要素にアクセスするよりも、いくつかの構造からフィールドにアクセスする方が遅くなりますか?

これは、配列の要素と構造体のフィールドにアクセスする方が速いからですか?例えば

、私は

1) An array of 5 ints 
2) As a field in 5 structures 

...として、いくつかのオブジェクトのために保存されたクロック・サイクルを持っていると私はその後、最小/最大を見つけるために、これらの要素にアクセスする必要があると言います。

フィールドとして自然に収まるものを複数の配列にするのではなく、オブジェクトのプロパティをまとめて保存するというアイデアが気に入っています。構造の中のフィールドとして扱うことによって、プログラミングの習慣が悪いと考えられるものを書いているのかどうかは分かりません。

+1

最初に正しく作成してください。それを読めるようにします。それから、それを速くしてください(もし必要なら)。 –

答えて

5

多分5つの要素ではないかもしれませんが、何千もの要素があると、違いがあるかもしれません。

キャッシングの普遍的な原則はLocality of referenceです。一緒に物を保存する方がよいでしょう。あなたのプログラムがあなたの構造体の1つ(または少数)のフィールドだけにアクセスすることが分かっている場合は、そのフィールドを専用配列に再配置する方が良いでしょう。あなたのプログラムがあなたの構造体のすべての(あるいはほとんどの)フィールドにアクセスするならば、構造体自体を配列で保持する方が良いでしょう。

しかし、パフォーマンスに関連するすべてのものと同様に、実際の動作はしばしば驚くべきことであり、通常、ある実装方法を測定し、次に他の方法を測定し、最良のものを選択する必要があります。


アプリケーションでパフォーマンスの最適化が必要ない場合は、最も読みやすいコードを使用してください。 structのフィールドとして、または配列として "クロックサイクル"を割り当てることができます。どちらの方法で読みやすくなるかは、アプリケーションによって異なります。場合によっては、現在開発中のアプリケーションのどの側面であっても。

+0

もちろん、数千から数百万の要素で、違いがあるかもしれません。しかし、誰かが常に測定すべきです。そしてその質問は明白にただ5つの要素を述べました。 –

1

測定可能な方法で、パフォーマンスが重要であることは非常に疑問です。

疑問があれば、それをベンチマークしてみませんか?

関連する問題