减少指令缓存错过(在C 中)



假设我有一个C 类,其实现看起来像这样:

// ...
MyClass::iterativeFunction() {
     for (int i = 0; i < 1000000; i++) {
          performAction(i);
     }
}
MyClass::performAction(int index) {
     // Block of code (non-inline-able)
}
// ...

在C 级别,我是否可以控制这些方法的空间位置,还是只希望编译器会注意到相关方法并相应地优化其组装?理想情况下,我希望它们彼此相邻,这样它们将被加载到指令中,但我不知道如何让编译器知道我真的希望发生这种情况。

在任何一种情况下,代码在进入缓存之前都无法运行。无论哪种情况,对于CPU,代码流量进行的CPU都将同样明显,因为该流量是无条件的。因此,这不会有任何区别。现代的代码缓存不会在地址空间中提前获取,它在指令流程中提前获取,遵循无条件的分支并根据需要预测条件分支。

因此,没有理由关心这一点。这不会有任何区别。

从技术上讲,不。但是,在现代处理器上,您通常不需要担心指令缓存几乎与您进行数据缓存一样多,除非您到处都有非常大的可执行文件或非常恐怖的分支。<<<<<<<<<</p>

原因是缓存线仅大约64个字节,这意味着,如果您的方法大于64个字节(并且它们是),即使它们直接直接直接在物理记忆中彼此。

如果您需要该级别的控制和优化水平,则C 是对您的错误语言。

但是您问题的实际答案是"否"。

否,据我所知,您无法指定方法的位置。如果C 允许嵌套过程,这将是确保所谓过程是本地的一种方法。

相关内容

  • 没有找到相关文章

最新更新