首页 / 知识
关于c ++:哪个可以编译为更快的代码:“ n * 3”或“ n +(n * 2)”?
2023-04-14 19:26:00

Which compiles to faster code: “n * 3” or “n+(n*2)”?哪个编译为更快的代码:" ans = n * 3"或" ans = n +(n * 2)"? 假设n是一个int或long,并且它正在现代的Win32 Intel机器上运行。 如果涉及一些取消引用,这会有所不同吗,也就是说,哪些引用会更快?
要么
还是不必担心,因为在任何情况下优化编译器都可能会解决这一问题? 除非您使用某些特殊的编译器,否则IMO无需进行此类微优化。我将可读性放在首位。 没关系现代处理器可以在一个时钟周期或更短的时钟周期内执行整数MUL指令,这与较旧的处理器不同,后者需要执行一系列移位并在内部进行加法以执行MUL,从而使用多个周期。我敢打赌
执行速度比
使用这种优化的最后一个处理器可能是486。(是的,这偏向于Intel处理器,但也可能代表其他体系结构)。 无论如何,任何合理的编译器都应该能够生成最小/最快的代码。因此,始终首先要具有可读性。
由于自己测量很容易,为什么不这样做呢? (使用来自cygwin的
进行几次测试,其他情况重复一次。
如果要查看汇编代码,请 不难发现编译器对您的代码做了什么(我在这里使用DevStudio 2005)。用以下代码编写一个简单的程序:
在中间行放置一个断点,然后使用调试器运行代码。触发断点后,右键单击源文件,然后选择"转到反汇编"。现在,您将拥有一个窗口,其中包含CPU正在执行的代码。在这种情况下,您会注意到最后两行产生的指令完全相同,即" lea eax,[ebx + ebx * 2]"(在这种特殊情况下,不进行移位和加法运算)。在现代的IA32 CPU上,由于CPU的流水线特性,如果直接使用修改后的值会过快,则直接执行MUL而不是进行位移位可能会更有效。 这证明了aku在谈论什么,即编译器足够聪明,可以为您的代码选择最佳指令。 这将取决于编译器,其配置和周围的代码。 如果不进行测量,您不应尝试猜测事物是否"更快"。 总的来说,您现在不必担心这种纳米级的优化工作-它几乎总是完全无关紧要的,并且,如果您真正在一个重要的领域工作,那么您已经在使用探查器并查看汇编语言的输出。编译器。 只要您使用的是不错的优化编译器,只需编写易于编译器理解的代码即可。这使编译器更容易执行聪明的优化。
您询问此问题表示优化编译器比您更了解优化。因此,请信任编译器。使用 也看一下这个答案。 不在乎。我认为还有更多重要的事情需要优化。您花了多少时间思考和编写该问题,而不是自己进行编码和测试? :-) 大多数编译器足够聪明,可以将整数乘法分解为一系列的移位和加法运算。我对Windows编译器一无所知,但是至少使用gcc可以使它吐出汇编器,如果您看一下,就两种编写方式而言,您可能会看到相同的汇编器。 它确实取决于您实际使用的编译器,但是很可能它们会转换为相同的代码。 您可以通过创建一个小的测试程序并检查其拆卸情况来自己检查它。 相信您的编译器可以优化诸如此类的小段代码。在代码级别,可读性更为重要。真正的优化应该更高层次。
编译器擅长优化您的代码。任何现代编译器在这两种情况下都会产生相同的代码,并用左移代替 |
最新内容
相关内容
linux编译源代码命令?
linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,linux怎样编译git源码包1、linux的源码是在/usr/src这个目录下,此linux命令提交代码?
linux命令提交代码?,工作,系统,地址,代码,命令,数据,信息,目录,标准,发行,求助:LINUX常用SHELL命令你可以通过打开Linux的terminal(终端)来执行Slinux代码同步命令?
linux代码同步命令?,时间,服务,系统,地址,代码,网络,通信,图片,风险,管理,linux系统时钟同步命令1、因此使用ntpdate同步可能会引发风险,因此该linux命令错误代码?
linux命令错误代码?,系统,密码,电脑,网络,手机,网址,软件,代码,设备,老板,Linux管理常见错误1、检查权限:使用文件浏览器和终端,检查文件的访问linux同步代码命令?
linux同步代码命令?,时间,系统,通信,网络,标准,图片,服务,代码,线程,单位,Linux下线程同步的几种方法1、线程同步的方式包括:互斥锁、读写锁、linux拉取代码命令?
linux拉取代码命令?,代码,工作,地址,命令,数据,系统,单位,生产,软件,目录,linux下wsdl2java获取源码命令首先,连接相应linux主机,进入到linux命linux代码对齐命令?
linux代码对齐命令?,系统,地址,标准,信息,对比,名称,代码,命令,文件,工作,linux命令大全之diff命令详解diff[参数][文件1或目录1][文件2或目录linux命令运行代码?
linux命令运行代码?,代码,单位,系统,环境,连续,保险,工具,命令,文件,音乐,Linux中,运行一个C语言程序如何运行1、编译。由.c文件生成.o文件,写搭建linux命令行代码?
搭建linux命令行代码?,系统,软件,工作,名字,服务,代码,地址,环境,管理,密码,linux如何搭建git1、Git已经在你的系统中了,你会做一些事情来客户linux变量是一个命令?
linux变量是一个命令?,系统,信息,变量,名称,官网,地址,环境,代码,地方,命令,$在linux里什么意思所谓$:也就是咱们平常说的“命令提示符”也就是linux查看命令代码?
linux查看命令代码?,系统,信息,代码,名称,命令,设备,数字,第一,软件,管理,在Linux命令终端中查看和编辑曾执行过的命令1、Linux可以使用以下几linux删除代码命令行?
linux删除代码命令行?,系统,代码,命令,文件,不了,环境,档案,名称,目录,文件夹,linux删除目录命令linux删除目录命令是Linux rm命令。rm即linux