我知道将指令加载到缓存中可以提高整体处理速度。这个问题的答案与组织和速度有关吗?
答案1
首先,你问题中的“块”部分……
通常,内存管理是针对内存块进行的。逐字节管理内存是没有意义的。这是因为要管理一块内存,您需要一个包含该块内存信息的数据结构。让我们大胆猜测一下,假设该数据结构的长度为 24 个字节。您不会使用 24 字节的数据结构来管理 1 个字节的内存。您想要“规模经济”。否则,您将获得大量的开销。相反,您一次管理 1 KB / 32 KB / 1 MB / 等等。
因此,当移动内存(例如移动到分页文件)时,它是以块的形式完成的,并且相同的方法也适用于缓存。
引用维基百科:“数据以固定大小的块(称为缓存行)在内存和缓存之间传输。当缓存行从内存复制到缓存中时,会创建一个缓存条目。”
缓存条目是我之前提到的数据结构的一个例子。
请记住,当程序指令进入缓存时,它们的进入方式与数据的进入方式相同。因此,上面的“数据被传输”也意味着“指令被传输”。
查看下面的维基百科条目。它有更多信息。
http://en.wikipedia.org/wiki/CPU_cache
======
现在是关于 CPU 缓存的更一般的答案。
主要是,加速是因为当 CPU 访问缓存时,它可以比访问主内存更快地获取指令/数据。
这是一个例子。您在程序中编写了一个循环。第一次运行时,内存的这一部分将被带入缓存。您从循环的开头开始,最终到达循环的底部。然后回到顶部。假设整个循环适合缓存(正常情况),第二次运行时这些指令已经在缓存中,并且该循环不需要再提取指令。这确实加快了速度。循环终止后,它最终将被程序中需要执行的其他部分在缓存中覆盖。
同样的事情也适用于数据。如果某个结构/变量组等被频繁引用或更新,它将在缓存中驻留一段时间。最终,它在数据缓存中的空间将被移交给其他结构/变量组等,因为程序开始频繁访问这些结构/变量组。