浅谈编译器优化

关于优化,可以说途径千千万万,没有一定的法则,但大抵有那么几个比较基本的法则,比如:充分了解计算机的体系结构,了解自己所处理的数据的特点,熟悉编译器的工作原理等等。今天我想谈谈关于编译器方面的一些见解,编译器分为预处理,编译,链接等大概的几个部分,如果能够清楚这几个阶段编译器各做了什么事情,编译器在哪方面比较聪明,能够替你做一些优化,又在哪方面比较弱智,无法替你做优化,你就能很清醒地知道,你做的哪些优化是有效的,下面举例说明:


今天有人提出在汇编指令中,去掉一些地址偏移乘法计算,这种善于动脑筋的方法值得赞赏,但可能对编译过程理解不是很透彻,会造成认识上的一些偏差。

比如如下指令:
movq 8*4(%%rsi),%%rax
这是一个移动数据的指令,操作的对象是一个128位的数,其中源操作数的选址方式是寄存器间接寻址,地址偏移量是8*4,目的操作数是一个128位的普通寄存器。很显然,源操作数有一个地址偏移计算的过程,其过程常规理解应该是,首先计算8*4,得到32,然后将32加到地址寄存器%%rsi中去,然后再去执行寻址内存的操作,那么按照这个理解,我们想当然可以提出如下优化:
movq 32(%%rsi),%%rax
很显然这个过程少了一个计算8*4=32的过程,应该能起到优化作用,但果真如此吗&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值