使用ID和数组(向量)的性能

时间:2012-01-17 13:03:43

标签: c++ c performance

我在学校被教过使用带有整数ID的数据库,我想知道它是否也是在C / C ++中这样做的好方法。我正在使用Ogre3D进行游戏,所以我希望我的游戏代码尽可能少地使用。

这不是确切的代码(我正在使用向量,它是关于字符和能力等),但我很想知道我访问权重的行是否会导致瓶颈,因为我要做几个数组下标。

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);
    }
}

我听说将数据放入数组是反复循环数据时获得性能的最佳方法,我只想知道您对此代码的看法......

1 个答案:

答案 0 :(得分:0)

一个好的优化器应该能够计算每个项目的内存地址的确切偏移量。循环迭代之间没有依赖关系,因此您应该能够展开循环(SIMD处理)。看起来很棒,恕我直言。如果你可以避免花车,这也会对你有帮助。