【发布时间】:2014-04-21 23:21:54
【问题描述】:
一直在阅读 Agner Fog 的“Intel、AMD 和 VIA CPU 的微架构”,在第 34 页他描述了“返回地址预测”:
http://www.agner.org/optimize/microarchitecture.pdf
3.15 返回(除 P1 之外的所有处理器)
一种更好的方法用于退货。后进先出缓冲区, 调用返回栈缓冲区,每次都记住返回地址 调用指令被执行,它使用它来预测在哪里 相应的回报会去。这种机制确保 当相同的子程序正确预测返回指令 从几个不同的位置调用。
鉴于返回地址无论如何都存储在堆栈中,我有点不清楚这样做的需要是什么?
如果还有这种技术,那么将返回地址存储在堆栈上的目的是什么?只有在这种预测技术不起作用时才使用堆栈存储的值吗?
【问题讨论】:
-
您不能假设处理器可以预测返回地址存储在堆栈中的确切位置。 ESP 寄存器通常在作为函数结尾部分的返回之前恢复。
-
@HansPassant 啊,所以我们试图预测返回地址,比如说在调用 ret 指令之前的 15 个 CPU 周期,因为在调用它之前的 15 个 CPU 周期我们不知道会发生什么ESP?
标签: performance architecture x86 cpu intel