2017-06-05 7 views
-2

私はデータのためのいくつかのコンテナを持っており、それを構造体に入れようと考えています(関数などに与えるのが簡単です)。 プログラムはできるだけ速くなければなりません。構造体のコンテナへのアクセスが遅くなるか、まったく同じですか?C++ STLコンテナのパフォーマンス。構造体の高速化または構造体なしの高速化

// data without struct 
double d1; 
bool b1; 
std::map<std::string, std::deque<double>> map1; 
std::vector<std::deque<int>> a1; 
std::vector<std::deque<int>> a2; 
std::vector<std::vector<<std::deque<int>>> a3; 
std::vector<std::vector<<std::deque<int>>> a4; 
// ... and perhaps even more 

VS

struct containerstruct 
{ 
    double d1; 
    bool b1; 
    std::map<std::string, std::deque<double>> map1; 
    std::vector<std::deque<int>> a1; 
    std::vector<std::deque<int>> a2; 
    std::vector<std::vector<<std::deque<int>>> a3; 
    std::vector<std::vector<<std::deque<int>>> a4; 
    // ... and perhaps even more 
}; 
containerstruct data; 
+4

さて、測定しましたか?早期の最適化はすべての悪の根源です:) – Rakete1111

+2

違いはありません。しかし、あなたはそれを自分で試してみませんか? – DeiDei

+2

どのように使用するかによって異なります。早期の最適化については気にしないでください。まず、読み込み可能でメンテナンス可能で、動作する素敵なプログラムがあることを確認してください。パフォーマンスが要件を満たしていない場合は、ベンチマークとプロファイルを使用してボトルネックを見つけ、それらの上位の数に集中します。 –

答えて

2

これは、これらのちょうど別の一つであり、 "私はグローバル変数を使用している場合、私のプログラムが速く実行されます?"質問。幸いにも、20年以上前の状況とは異なり、答えは今や響きますいいえ

最新の最適化コンパイラでは、結果コードはほぼ同じになります。 最悪の場合では、フィールドにアクセスするために1つのポインタの参照を解除しますが、これは検出可能なパフォーマンスの違いにはなりません。

したがって、関連するものを一緒にカプセル化することを意味する、読み込み可能で保守可能なコードを記述する必要があります。ところで、これはオブジェクト指向設計の全前提です。

+0

あなたはこれを比較することはできないと思う。グローバル変数はカプセル化についてではなくスコープの問題です。 質問はパフォーマンスに言及しました。オブジェクト指向設計は、時間が重要なアプリケーションにとっては最初の選択ではありません:-)構造体はオブジェクト指向設計の先駆けなので、疑問です。 – Code

+0

私はパフォーマンスの質問に答えました。カプセル化またはスコープのいずれかがパフォーマンスに影響を及ぼす理由を説得したわけではありません。コンパイラはどちらも知らない。 –

関連する問題