当我编译这段代码时
unsigned char A[] = {1, 2, 3, 4};
unsigned int
f (unsigned int x)
{
return A[x];
}
gcc输出
mov edi, edi
movzx eax, BYTE PTR A[rdi]
ret
在x86_64机器上。
问题是:为什么要使用nop指令(mov edi,edi)?
我正在使用gcc-4.4.4。
最佳答案
在64位模式下,mov edi, edi
不是空操作。它将rdi
的高32位设置为0。
这是一般情况的一种特殊情况,在32位操作中,所有32位操作都在64位模式下清除目标寄存器的高32位。 (与保留不变的CPU相比,它可以提供更高的CPU效率,而且也许也更有用。)
关于c - GCC热修补?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4121053/