我试图了解指令缓存是如何工作的。
执行代码块时预取了多少额外的缓存线?它是否考虑到分支预测?
如果一个代码块包含一个函数调用,函数代码体是按顺序加载还是在缓存的不同部分加载?
例如,以下代码片段是否相同?
if (condition) {
// block of code that handles condition
}
和
if (condition) {
handle_condition(); // function that handles the condition
}
如果条件很少为真,哪一个会减少指令序列中的“漏洞”?
- 如果我的第一个示例是经常运行的代码的一部分并且
if
条件永远不会为真,那么if
条件的主体最终会被驱逐,而代码主体的其余部分保持原样吗?
我假设这些问题没有取决于特定微架构的答案。但万一他们这样做了,我有一个 x86-64 Intel Sandy Bridge。