【发布时间】:2017-06-28 12:15:34
【问题描述】:
================更新=======================
似乎与 Do modern cpus skip multiplications by zero? 重复
但是请允许我保留这篇文章,因为我在发布之前没有搜索过那篇文章。并允许我在答案区中发布我的测试结果。
==================原帖=================
以这个函数为例:
int mul(int a, int b, int c, int d){
return a*b*c*d;
}
当cpu进入这个函数调用时:
int result = mul(0, 1, 2, 3);
(假设我们不允许编译器进行任何优化,并且机器代码完全按照程序顺序显示。)
我知道现在 x86 CPU 有乱序执行,当他发现他得到一个零操作数时,它会提前结束乘法吗?
谢谢!
【问题讨论】:
-
可能。可能不会。取决于实施。
-
哪个 CPU?你需要谈一个具体的,否则这个问题是无法回答的。此外,并非所有 CPU 都执行乱序执行(大多数 x86-64 架构会执行,但 RISC 通常不会执行)
-
@UnholySheep 好的,我有更新。
-
当前所有的 x86 µarch 都有固定时间乘法。