数组是一种线性表数据结构,在内存中使用了一段连续的内存空间。
计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算机需要随机访问数组中的某个元素时,通过下面的寻址公式,计算出该元素存储的内存地址:
// 计算下标为 i 的元素的内存地址公式如下
// baseAddress为a[0]的地址
// dataSize由数组存储的数据类型决定,例如存储的为int类型就是4个字节
targetAdress = baseAddress + i * dataSize
如果数组的下标是从1开始,那么寻址公式就会变成
targetAdress = baseAddress + (i - 1) * dataSize
结论
对比两个公式我们可以发现,差别其实并不大,只是多了一次 i-1 的减法运算。但是对于CPU而言就是多了一次减法指令,数组作为非常基础的数据结构,对于效率的优化就要尽可能做到极致,所以在追求极致时,能减少一次减法操作肯定是更好的选择