迭代一个bool、int或long数组的速度有区别吗?

本文关键字:数组 long 速度 有区别 int 一个 bool 迭代 | 更新日期: 2023-09-27 18:09:16

我主要对c#感兴趣,但也欢迎一般的答案。

与int型数组相比,迭代long型数组需要更长的时间吗?我认为较大的值类型占用更多的内存,因此连续数组显然更长。但是,如果间隔是8,16或32字节,那么从Array[0]到Array[1]的跳有什么不同吗?

如果是,大型结构类型(因为它的值)会花费更长的时间吗?

或者遍历数组有点只是内存指针到内存指针和下一项的间隙/位置不是真的相关?

迭代一个bool、int或long数组的速度有区别吗?

数组的基本结构如下:

  • 一个初始内存指针
  • 其长度的值
  • 从初始内存pointer + sizeof(type) * length预留内存

有了这三个信息,指向任何值的确切位置就很简单了:

memory pointer + sizeof(type) * element where 0 <= element < length

当访问数组中的不同值时,编译器会将其转换为执行这样的计算并在给定位置加载该值(这里:在原语中)。两者之间没有间隙,因为它的定义本身使O(1)成为可能(并且是必要的)。