1

如果有一个函数指针表,并且索引作为 volatile 变量提供,生成的代码是否会被认为是无分支的,这样可以避免推测执行,还是处理器仍会尝试推测最可能的分支?

作为一个简单的例子,考虑:

if (input_value > thresh) {
    do_this();
} else {
    do_that();
}

我预测具有推测执行的 CPU 会尝试它认为最有可能执行上述代码的分支。

但是,如果转换成跳转表:

this_or_that[input > thresh]();

上面的代码还会触发推测执行吗?

4

1 回答 1

1

基于编译器生成的跳转表的共性,如果 CPU 设计人员未能通过这些表跟踪分支,我会说这是相当短视的。也就是说,并非所有 CPU 的能力都相同,因此您的里程可能会有所不同。

于 2018-03-29T05:15:34.947 回答