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

一个人可以通过访问一个值

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]


等等...

最佳答案

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

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


当处理循环中的深层嵌套结构时,我发现这特别有用。确定不变的嵌套零件并将其吊起。

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


与往常一样,值得您花时间了解编译器及其实际生成的内容。有时,您可能会为您的项目使用编译器,而该编译器根本没有进行任何优化,因此类似这样的小事情可能会有所作为(但不要以为会这样做)。

10-08 04:48