通过这本书的第 3 章,称为计算机系统架构:程序员的观点,据说这样的实现
testl %eax, %eax
cmovne (%eax), %edx
是无效的,因为如果预测失败,那么我们将取消引用 NULL。还指出我们应该使用分支代码。
不过,使用条件跳转不会导致相同的结果吗?例如:
.L1:
jmp *%eax
testl %eax, %eax
jne .L1
是否可以欺骗 gcc 为 x86-32 输出类似的东西?假设我有一个指向函数的指针数组,其中一些是有效的,一些是无效的,并且我调用每个不是 NULL 的函数。