假设我有一个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 允许嵌套过程,这将是确保所谓过程是本地的一种方法。