我有一个函数,它接收来自用户的一维数组和数字,并将这两者加在一起。
样品:
0 1 2 3 4 5 6 7 8
用户:9
9 10 11 12 13 14 ...
我一直在使用以下代码:
for(int i =0; i < arr; i++){
arr[i] = arr[i] + usrNumber;
}
现在这看起来非常低效,因为我必须迭代遍历数组的每个位置并将值加在一起。
我已经从previous post读到了块方法,但我的印象是它必须至少是二维的才能工作。有什么方法可以改善这个功能?
答案 0 :(得分:2)
您的代码已具有出色的空间位置。空间局部性定义为
如果在特定时间引用了特定的内存位置,则很可能在不久的将来引用附近的内存位置。 (维基百科)
做得更好的最简单方法是使用处理器的向量指令,假设处理器有这些指令并且编译器没有为您执行此操作。例如,x86处理器具有 SSE 指令,可以加快您的工作速度。
如果阵列足够大,那么如果处理器支持它,你可以进行缓存预取。请注意,过去几年中制造的英特尔处理器会自动执行此操作。