执行直接指针操作还是 [] 更好

Is it better to perform direct pointer operations or []

本文关键字:更好 操作 指针 执行      更新时间:2023-10-16

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

现在,假设我想得到元素A[i][j],简单地使用 A[i][j]*(A+(i*width+j)) 在速度上有什么区别(忽略我需要计算 i*width+j 的事实,假设我已经有了这个值)?

启用所有优化后,应该没有区别 - 不仅在计时上,而且在编译器为这两个构造生成的代码上。

从程序员的角度来看,最大的区别是可读性。第一个结构立即告诉读者他正在处理一个 2D 数组,而第二个结构需要一些思考(是行主序还是列主序?width在哪里计算?选择这种方式而不是更明显的 2D 数组语法的原因是什么?这就是为什么第一个结构在现实生活中更可取的原因。

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

另一方面,如果使用[]表示法,则这些问题不适用,编译器可能会更积极地应用优化。