本文摘要(由AI生成):
本文讨论了不同编程语言中数组索引的差异,如Fortran从1开始,而Python或C++从0开始。无论哪种语言,最终程序需转化为机器码执行。在机器层面,数组索引通过寄存器中的地址和偏移量处理。C++等基于0的索引语言在计算元素地址时效率略高,但此优势对现代计算机而言微不足道。C系列语言的设计思路更接近CPU操作。
一些编程语言的索引从1开始。比如在Fortran中,声明数组integer :: array(5)会创建一个包含5个元素的数组。要访问第一个位置的元素,则索引为1,即array(1)。而在python或者C++语言,第一个元素的索引则为0。
不管用什么语言编写程序,最终都要转化成CPU能实际执行的机器码。
在机器级别,数组索引通过偏移量来处理:一个寄存器(CPU内部特殊的内存)数组地址(数组第一个元素的地址),而另一个寄存器则包含偏移量,即到目标元素的距离。
第一个元素的偏移量和C++一样是0,使用Fortran这样的语言,必须先将基于1的索引转换成基于0的索引,再乘以每个元素的地址大小获得索引为i的元素地址:
元素i的地址 = 基本地址+((i-1)*每个元素地址大小)
而C++这样基于0的索引的语言则可以稍微提高一下效率:
元素i的地址 = 基本地址+(i*每个元素地址大小)
表面上看起来是节省了一些CPU运行时间,这对于现代计算机硬件设施来说微不足道。不过所有C系列语言(C,C++,C#)就是这样的的设计思路,也最接近CPU所做的事情。
参考文献《C++ Without Fear,3rd》