访问嵌套数据结构的最佳方法?

时间:2010-06-03 19:17:04

标签: c++ performance nested

我想知道访问大型数据结构的最佳方式(性能方面)是什么。 有大约一百种方法可以做,但编译器最容易获得哪些优化?

可以通过

访问值
foo[someindex].bar[indexlist[i].subelement[j]].baz[0]

或创建一些指针别名,如

sometype_t* tmpfoo = &foo[someindex];
tmpfoo->bar[indexlist[i].subelement[j]].baz[0]

或创建像

这样的参考别名
sometype_t &tmpfoo = foo[someindex];
tmpfoo.bar[indexlist[i].subelement[j]].baz[0]

依此类推......

3 个答案:

答案 0 :(得分:5)

过早优化是万恶之源。编写清晰的代码,如果它太慢,请对其进行分析并查看花费的时间并在那里进行优化。

话虽如此,编译器有99%的可能性为这三个示例生成相同的代码。

答案 1 :(得分:1)

你在这里描述的所有三个都将编译(使用一个不错的编译器)同样的东西。

答案 2 :(得分:0)

作为个人偏好,我通常会发现,如果遍历的嵌套级别较少,则更容易阅读和理解。因此,我倾向于使用......

SomeType  *pSomeType = &asManyLevelsAsItMakesSense[someIndex];
pSomeType->subSomeNestedLevels = ...;

我发现这在处理循环中的深层嵌套结构时特别有用。识别不变的嵌套部分并将其提升出循环。

SomeType  *pSomeType = &...;
for (i = 0; i < N; i++)
    pSomeType->field[i] = ...;

与往常一样,了解您的编译器及其实际生成的内容值得您花些时间。有时候你可能会遇到一个没有优化的项目编译器,所以这样的小事情就会产生影响(但不要以为它会有所不同)。