C与汇编程序的效率

Kyl*_*ndo 4 c performance assembly

以下汇编程序代码的速度有多快:

shl ax, 1
Run Code Online (Sandbox Code Playgroud)

与以下C代码相对应:

num = num * 2;
Run Code Online (Sandbox Code Playgroud)

我怎么能找到?

AnT*_*AnT 25

您的装配变量可能更快,可能更慢.是什么让你认为它必然更快?

x86的平台上,也有相当多的方法来乘以2,这是我所期望的编译器做的add ax, ax,这是直观更有效的比你的shl,因为它不涉及可能对存储的常量("1"你的情况) .

而且,很长一段时间,在x86平台上,用常数乘以东西的首选方法不是移位,而是lea操作(如果可能的话).在上面的例子中lea eax, [eax*2].(乘以3将完成lea eax, [eax*2+eax])

轮班操作在某种程度上"更快"的信念对于新手而言是一个很好的老故事,今天几乎没有相关性.而且,和往常一样,大多数情况下,您的编译器(如果它是最新的)对基础硬件平台的了解要远远超过对转换操作的天真热爱.


Mik*_*vey 8

无论如何,这是一个学术问题吗?我假设你明白它属于"理发减肥"的一般范畴.


Pas*_*uoq 5

如果您正在使用GCC,请询问使用选项-S查看生成的程序集.您可能会发现它与汇编程序指令相同.

要回答原来的问题,上外的顺序处理器指令速度由吞吐量和延迟测量,你会使用这两种措施RDTSC汇编指令.但是其他人为你做了很多处理器,所以你不需要打扰.PDF