我想知道访问大型数据结构的最佳方法是什么(在性能方面)。
有大约一百种方法可以做到,但是编译器最容易优化的是什么?
一个人可以通过访问一个值
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] = ...;
与往常一样,值得您花时间了解编译器及其实际生成的内容。有时,您可能会为您的项目使用编译器,而该编译器根本没有进行任何优化,因此类似这样的小事情可能会有所作为(但不要以为会这样做)。