迭代一个bool、int或long数组的速度有区别吗?
本文关键字:数组 long 速度 有区别 int 一个 bool 迭代 | 更新日期: 2023-09-27 18:09:16
我主要对c#感兴趣,但也欢迎一般的答案。
与int型数组相比,迭代long型数组需要更长的时间吗?我认为较大的值类型占用更多的内存,因此连续数组显然更长。但是,如果间隔是8,16或32字节,那么从Array[0]到Array[1]的跳有什么不同吗?
如果是,大型结构类型(因为它的值)会花费更长的时间吗?
或者遍历数组有点只是内存指针到内存指针和下一项的间隙/位置不是真的相关?
数组的基本结构如下:
- 一个初始内存指针
- 其长度的值
- 从初始内存
pointer + sizeof(type) * length
预留内存
有了这三个信息,指向任何值的确切位置就很简单了:
memory pointer + sizeof(type) * element
where 0 <= element < length
当访问数组中的不同值时,编译器会将其转换为执行这样的计算并在给定位置加载该值(这里:在原语中)。两者之间没有间隙,因为它的定义本身使O(1)
成为可能(并且是必要的)。