我们喜欢认为内存访问是快速且持续的,但在现代架构/操作系统上,这不一定是正确的。
考虑以下 C 代码:
int i = 34;
int *p = &i;
// do something that may or may not involve i and p
{...}
// 3 days later:
*p = 643;
如果在 CPU 指令中最后一次分配的估计成本是多少
i
在一级缓存中,i
在二级缓存中,i
在三级缓存中,i
在 RAM 中,i
被调出到 SSD 磁盘,i
被调出到传统磁盘?
i
还能在哪里?
当然数字不是绝对的,但我只对数量级感兴趣。我试着在网上搜索,但这次谷歌并没有祝福我。
最佳答案
这里有一些确切的数字,表明确切的时序因 CPU 系列和版本而异:http://www.agner.org/optimize/
这些数字是一个很好的指南:
L1 1 ns
L2 5 ns
RAM 83 ns
Disk 13700000 ns
作为一个信息图来给你数量级:
关于language-agnostic - 内存访问的成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038999/