2012-01-17 6 views
0

私は学校で整数IDのデータベースを使用するように教えられており、C/C++でもデータベースを使用するのがよい方法かどうかを知りたいと思っています。私はOgre3Dを使ってゲームを作っているので、私はゲームコードをできるだけ少ないサイクルで使いたいと思っています。IDと配列(ベクトル)を使用したパフォーマンス

これは正確なコードではありません(私はベクターを使用しています。キャラクターや能力などについてです)が、私がウェイトにアクセスする行がボトルネックを引き起こすかどうかを知りたいのですが、私はいくつかの配列の添字をしていたので。良いオプティマイザがあるべき

struct item 
{ 
    float weight; 
    int mask; 
    item(): mask(0) {} 
} 
items[2000]; 

struct shipment 
{ 
    int item_ids[20]; 

} 
shipments[10000]; 

struct order 
{ 
    int shipment_ids[20]; 
} 
orders[3000]; 

int main() 
{ 
    // if I want to access an item's data of a certain order, I do: 
    for (int i = 0; i < 3000; ++ i) 
    { 
     if (items[shipments[orders[4].shipment_ids[5]]].weight > 23.0) 
      s |= (1<< 31); 
    } 
} 

私は配列にデータを置くことは、繰り返しデータをループするときのパフォーマンスを得るための最良の方法であることを聞いたことが、私はこのコードの上のあなたの意見を知りたい...

+0

測定、測定、測定。 – pmg

+0

どこに** i ** **を使用していない場合は、ループに入れるのはなぜですか?投稿したコードに基づいて、静的な場所を参照しているだけなのでループを解除する必要があります。 –

答えて

0

それらのアイテムのそれぞれのメモリアドレスの正確なオフセットを計算することができる。ループ反復の間に依存関係はないので、ループをアンロール(SIMD処理)することができるはずです。 IMHO。浮きを避けることができれば、それもあなたを助けるでしょう。

+0

ありがとう、私はあなたを愛しています – jokoon

関連する問題