如何从RAM获取数据?

mez*_*zda 5 c memory ram x86

在C中,每个字节都是可单独寻址的.假设一个整数(比如使用4个字节)有一个地址0xaddr(32位,假设我们有32位处理器,32位地址总线和32位数据总线),并假设整数的值为0x12345678.现在,如果我从内存中获取此值,处理器如何执行此操作?处理器是否在0xaddr地址线上放置(32位地址),然后获取8位数据0x12.然后处理器将0xaddr+1在地址线上加速,然后获取另一个8位数据0x34,依此类推整数的4个字节?或者处理器是否只是一次放置0xaddr并读取4个字节,从而利用其完整的32位数据总线?

and*_*oke 6

这是 GNU C库主管的一篇着名文章,描述了内存访问(特别是在x86 - 当前的PC系统中).它比你可能需要的更详细.

整篇文章分布在很多部分:

  1. 介绍
  2. CPU缓存
  3. 虚拟内存
  4. NUMA支持
  5. 程序员
  6. 更多程序员
  7. 性能工具
  8. 未来
  9. 附录

我要添加到gbulmer的答案中的一件事是,在许多系统中,获取数据流的速度比获得单个单词的速度要快.换句话说,选择你想要读取的位置需要一些时间,但是你选择了一个,从那一点读取,然后是下一个32或64或任何位,然后下一个...比切换到一些未连接的地方,并阅读另一个值.

主导现代编程的不是从主板上的内存中获取的行为,而是数据是否在cpu缓存中.