c++ - 使用 ID 和数组( vector )的性能

标签 c++ c performance

我在学校学过如何使用带有整数 ID 的数据库,我想知道这是否也是在 C/C++ 中这样做的好方法。我正在使用 Ogre3D 制作游戏,因此我希望我的游戏代码使用尽可能少的周期。

这不是确切的代码(我使用的是 vector ,它与角色和能力等有关),但我很好奇我访问权重的行是否会导致瓶颈,因为我会做几个数组下标。

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

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

最佳答案

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

关于c++ - 使用 ID 和数组( vector )的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8895062/

相关文章:

c++ - 如何释放由 imdecode 创建的 IplImage

c++ - 使用 gzip 压缩 POCO HttpResponse 来削减内容

java - 在 O(n log n) 时间内生成长度为 n 且反转次数为 k 的数组的算法?

php : speed up levensthein comparing, 10k + 记录

c - 使用 ssh 和 libssh2 lib 发送命令

javascript - 切换隐藏小部件回流性能的最佳选择

c++ - 我的程序无法正确计算单词或字符的行数?

c++ - 使用邻接矩阵进行图形着色

c - 具有近乎无限增长的匿名 mmap

c - 字符串数组中的最后一个字符串(从 strtok 解析)有垃圾