我读过很多关于数组索引与指针的效率的资料,除非你做很多事情,否则这并不重要。但是,我经常这样做。
有问题的代码有一个结构数组。 (两个不同的,实际上是两种不同的类型,但无论如何)。由于我的背景主要是高级语言,所以我默认使用标准的 particles[i].whatever
格式。但是,我不确定这是否是个好主意。对于单次访问,我知道这并不重要,但就目前而言,我的两个主要函数之一调用了 particles[i].something
8 次,并且 boxes[boxnum ].something
每个粒子每次迭代 4 次。
目前,执行 5000 个粒子和 5000 次迭代大约需要一秒钟。这意味着我处理这些访问的频率高达每秒 2 亿次 [包括其他函数]。在那个频率下,每一点点滴都很重要(特别是因为我最终会在其他人的集群上按时运行这段代码)。
所以我的问题是,是否值得按照使用指向结构的指针而不是数组访问的方式做一些事情,gcc 是否会神奇地为我做这件事,或者它是否真的无关紧要。
谢谢 ~~泽布
编辑:好的,所以编译器魔法意味着我不应该担心它。谢谢。
你建议使用分析器,但我似乎无法让 gprof 告诉我任何比时间函数所花费的更细粒度的信息......我已经知道了。有什么可以逐行告诉我的吗?
最佳答案
如果您按顺序迭代数组,那么您可能受益于使用在每个循环中递增的指针。与取消引用数组相比,算术运算要少一些。但是,编译器非常擅长优化事物,因此您可能看不到任何好处。
最好运行一个分析器,看看问题到底出在哪里。您可能会惊讶于您离猜测瓶颈还有多远。
关于c - 数组索引效率(特别是临时变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090204/