内存访问的成本是多少?

Gyö*_*sek 8 language-agnostic memory hardware

我们认为内存访问是快速且持续的,但在现代架构/操作系统上,这不一定是真的.

考虑以下C代码:

int i = 34;
int *p = &i;

// do something that may or may not involve i and p

{...}

// 3 days later:

*p = 643;
Run Code Online (Sandbox Code Playgroud)

如果,CPU指令中最后一次分配的估计成本是多少?

  • i 在L1缓存中,
  • i 在L2缓存中,
  • i 在L3缓存中,
  • i 在RAM中,
  • i 被分页到SSD磁盘,
  • i 被分页到传统磁盘?

还有什么地方可以i

当然这些数字并不是绝对的,但我只对数量级感兴趣.我尝试搜索网络,但谷歌这次没有给我保佑.

Wil*_*ill 14

这里有一些硬数字,证明了精确的时序因CPU系列和版本而异:http://www.agner.org/optimize/

这些数字是一个很好的指南:

L1           1 ns
L2           5 ns
RAM         83 ns
Disk  13700000 ns
Run Code Online (Sandbox Code Playgroud)

并作为一个infograph给你的数量级:

单击查看大视图(src http://news.ycombinator.com/item?id=702713)

  • 它只是我还是那个图像只是一个大红色的'honkin'矩形? (7认同)
  • 编辑 - 信息图表甚至在缩放时说出来.13.7ms.1ms = 1,000,000ns. (2认同)