test与cmp指令的区别在哪?
我分别试了两段代码while( n >= 5 )和while( n > 0 ),在开O2的时候,生成的汇编分别是
cmpl $4, %ecx和testl %ecx, %ecx
我想问一下,为什么后面那个不用cmpl了,是因为testl更快吗?如果效率完全一样,那编译器没必要生成不同的汇编代码啊。
[解决办法]
从资料上来看,这两组指令它们的执行效率和影响的执行微单元都是一样的。区别,最明显的应该就是指令本身所占用的字节数了,mov 和 cmp 要 5 字节,test 和 xor 只需要 2 字节;虽然你开的是 O2 选项。