迭代一系列bool,int或longs之间是否存在速度差异?

时间:2016-09-28 10:45:24

标签: c# arrays performance optimization

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

与整数相比,迭代一系列长整数需要更长的时间吗?我想较大的值类型占用更多的内存,因此连续的数组显然更长。但是如果间隙是8,16或32字节等,从Array [0]到Array [1]的跳跃是否有任何不同?

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

或者遍历一个数组有点只是内存指针指向内存指针而下一个项目的间隙/位置并不真正相关?

2 个答案:

答案 0 :(得分:4)

我想你下次应该多搜索一下。以下是您要寻找的答案: Iterating speed and data type

答案 1 :(得分:2)

数组基本上具有以下结构:

  • 初始内存指针
  • 长度值
  • 来自初始内存的保留内存pointer + sizeof(type) * length

使用这三个信息,指出任何值的确切位置是微不足道的:

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

当访问数组中的不同值时,编译器将翻译它以执行此类计算并在给定位置加载值(此处:in primitives)。中间没有间隙,因为它的定义使得O(1)成为可能(并且是必要的)。