问指针真的比数组快吗?函数调用会减慢多少速度?++i比i = i + 1?
答对于这些以及许多类似的问题,精确的答案当然取决于所使用的处理器和编译器。如果你一定要知道,你必须仔细测试计时程序。(通常差异如此之小,以至于需要数十万次迭代才能看到它们。[脚注] 如果可用,请检查编译器的汇编语言输出,看看两个所谓的替代方案是否没有被编译成相同的代码。)
对于传统机器,使用指针遍历大型数组通常比使用数组下标快,但对于某些处理器而言,情况则相反。(更好的编译器无论你使用哪种表示法都应该能生成良好的代码,尽管对编译器来说,将数组索引转换为指针比反之更容易。[脚注])
函数调用虽然明显比内联代码慢,但它对模块化和代码清晰度的贡献如此之大,以至于很少有充分的理由避免它们。(实际上,通过减小体积,函数可以提高性能。)此外,一些编译器能够将小的、关键路径的函数内联展开,无论是作为一种优化还是程序员的要求。
在重新排列诸如i = i + 1之类的表达式时,请记住你是在处理一个编译器,而不是一个可以编程的计算器。任何不错的编译器都会为++i, i += 1,而i = i + 1生成相同的代码。使用++i或i += 1而不是i = i + 1的原因与风格有关,而不是效率。(另请参阅问题 3.12b。)