执行直接指针操作或[]更好吗?

时间:2014-02-09 05:51:32

标签: c++ c

我有一个二维数组。我需要尽快对它执行一些操作(函数将每秒调用十几次,所以最好使其高效)。

现在,假设我想获得元素A[i][j],简单地使用A[i][j]*(A+(i*width+j))之间的速度是否存在差异(忽略我需要计算i * width的事实) + j,假设我已经有了这个值)?

2 个答案:

答案 0 :(得分:5)

打开所有优化后,应该没有区别 - 不仅在时间上,而且在编译器为这两个结构生成的代码中也是如此。

与程序员的观点最大的区别在于可读性。第一个构造立即告诉读者他正在处理2D数组,而第二个构造需要一些思考(它是行主要顺序,还是列主要顺序?width计算在哪里?什么是之所以选择这种方式而不是更明显的2D数组语法?)。这就是为什么第一个结构在现实场景中更可取的原因。

答案 1 :(得分:1)

根据编译器的质量,我认为[]符号可以带来更快的代码。原因是当您使用指针时,编译器无法确定没有发生指针别名,这可能会妨碍某些优化。

OTOH,如果使用[]符号,则这些问题不适用,编译器可以更积极地应用优化。