20120331工作日记——汇编程序的优化

5 篇文章 2 订阅

经过几天的学习调试,将某个算法转换成了汇编程序,经过profile,发现需要的指令数提高了4倍。。。。。。泪流满面。。。。。。

经过这个过程我了解到一些事情:

首先基于汇编的人工优化主要是使用特殊的指令,在特殊的寻址或运算中,如果有对应的指令(扩展的指令集),效率会大幅提高,但是这个C程序本身已经是很优化了,只有简单的加减移位等操作,如果只是用基本的汇编指令的话,人工优化很难比编译器优化的好。这次的优化过程,同样的函数,编译器(O2选项)编译出来是38条指令,而我写出来的是62条指令。

另外函数的各个参数的入栈出栈也比较消耗指令数,在这一点上,宏函数的性能就好很多。

在用time命令测试程序运行时间时,尽管处理数据量增加了10倍,但运行时间只增加了12%,这说明此程序的瓶颈已经不是CPU了,时间主要都花费在读入数据上面了。

汇编程序的问题主要出在三个方面:一是许多寄存器不能随便使用;二是函数参数入栈的顺序,既函数参数在栈中的位置;三是跳转指令后面要跟一条nop。


虽然优化的结果比较失败,不过我还是对函数的效率有了直观的认识,对反汇编等文件也有了一定的了解,对程序的运行细节的认识也深入了很多,包括参数的传递,参数的入栈等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值