C++ 在C中导航数组(性能)?

C++ 在C中导航数组(性能)?,c++,c,arrays,performance,C++,C,Arrays,Performance,使用指针导航值数组更好,还是使用下标数组名更好 编译器如何处理这两种方法?任何现代编译器都应该为这两种方法生成等效的汇编代码。我做了一个简短的测试。我创建了int-arr[10]并使用int索引的普通for循环将所有单元格设置为10,使用int*设置一个单元格 奇怪的是,在我看来(我接受Midhun MP参数),指针索引的循环汇编代码比普通方法要大(多1行)。但当我打开O3时,优化输出完全相同 国际海事组织的规则应该易于阅读,并且一开始就没有错误。只有在您真正需要的情况下才能进行微观优化。在其他

使用指针导航值数组更好,还是使用下标数组名更好


编译器如何处理这两种方法?

任何现代编译器都应该为这两种方法生成等效的汇编代码。

我做了一个简短的测试。我创建了
int-arr[10]
并使用
int
索引的普通for循环将所有单元格设置为
10
,使用
int*
设置一个单元格

奇怪的是,在我看来(我接受Midhun MP参数),指针索引的循环汇编代码比普通方法要大(多1行)。但当我打开
O3
时,优化输出完全相同

国际海事组织的规则应该易于阅读,并且一开始就没有错误。只有在您真正需要的情况下才能进行微观优化。在其他情况下,可读性优于性能


如果你好奇它是如何工作的。你自己做这个测试。准备两个版本的代码,用
gcc-S
和diff输出编译它。

编译器可能会生成相同的汇编代码。用经验来解决这些问题比理论化要好。编写可读的代码。如果使用一个版本而不是另一个版本确实存在性能瓶颈,并且您已经运行了探查器来确认这确实是根本原因,那么您可以开始进行这些微优化。在程序的早期这样做只会使阅读变得更加困难,并有引入bug的风险。您的问题已经结束。如果您要展示一些用例,我会投票重新打开。为什么语言设计者会给出两种选择?显然,指针在某些情况下更好,数组索引在其他情况下更好。谷歌:指针别名,看看为什么数组可能更快。其他人给出了指针可能更快的原因。Fortran经常被证明能提供更好的矩阵性能,只是因为程序员不能使用指针。这取决于算法、程序员和编译器。另请参见:。