将数组初始化为0需要多少时间?

约翰·杜

我很困惑是否
int arr[n]={0}需要恒定的时间,即O(1)或O(n)?

用户名

您应该期望O(N)时间,但有一些警告:

  • 如果数组占用的内存小于字长,则为O(1)。(它可能一直是O(1)到现代CPU上的缓存行大小)
  • 如果数组适合内存中的单个层,则为O(N)。
  • 如果数组通过这些层,则情况将很复杂:所有现代计算机上都有多个层(寄存器,L0高速缓存,L1高速缓存,L3高速缓存?,多CPU计算机上的NUMA,虚拟内存(映射到交换),...) 。如果数组不能合而为一-将会导致严重的性能损失。

CPU缓存体系结构会严重影响将内存清零所需的时间。实际上,将其称为O(N)会产生误导,因为从100到101,如果它落在缓存边界(行或整个)上可能会使时间增加10倍。如果涉及交换,则可能会更加戏剧化。当心分层内存模型...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章