在阅读名为计算机系统结构:程序员的视角的书籍第三章时,提到了这样一种实现:
testl %eax, %eax
cmovne (%eax), %edx
如果预测失败,那么“is invalid”就是无效的,因为我们将会遇到NULL引用错误。文中也指出我们应该使用分支代码。
不过,使用条件跳转难道不会导致相同的结果吗?例如:
.L1:
jmp *%eax
testl %eax, %eax
jne .L1
有没有可能欺骗gcc输出类似于x86-32的内容?假设我有一个指向函数的指针数组,其中一些是有效的,一些是无效的,我调用每个不为NULL的函数。