C/C++语言执行效率的优化方法(待续)

发布时间:2025-02-22 16:11

持续优化流程:不断改进工作方法,提高执行效率。 #生活技巧# #团队建设技巧# #团队执行力强化#

最新推荐文章于 2024-12-07 00:00:00 发布

秦伟H 于 2016-03-13 13:40:17 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

个人总结,也可能和编译器与环境有关,没有绝对!下边以linux系统、AT&T指令集、GCC编译器为编译运行环境。

1.循环条件和下标的设立,尽量迁就下标操作,下标有加法的话,会增加计算偏移量的汇编语句。

比如这个十六进制转换十进制的例子,这个下标加2是为了跳过十六进制的开头"0x",(此例假设输入正确,直接跳,也可以加"0x"是否合法的判定,不赘述):

x11 input = "0x123"; x

x12

B+ x13 for(int i = 0;i < input.size() - 2;i++) x

x14 { x

B+ x15 if(input[i + 2] >= 'a' && input[i + 2] <= 'f')

x16 { x

x17 iTemp = input[i + 2] - 'a' + 10; x

x18 }else if(input[i + 2] >= 'A' && input[i + 2] <= 'F')

x19 { x

x20 iTemp = input[i + 2] - 'A' + 10; x

x21 }else if(input[i + 2] >= '0' && input[i + 2] <= '9') x

x22 { x

>x23 iTemp = input[i + 2] - '0'; x

x24 } x

x25 iResult = iResult * 16 + iTemp;

x26 }

尽量不要这样做,因为这样会有额外的加法产生,无论条件判断,还是内部操作

>x0x804894f <main()+379> mov 0x1c(%esp),%eax x

x0x8048953 <main()+383> add $0x2,%eax x

x0x8048956 <main()+386> mov %eax,0x4(%esp) x

x0x804895a <main()+390> lea 0x10(%esp),%eax x

x0x804895e <main()+394> mov %eax,(%esp) x

x0x8048961 <main()+397> call 0x8048674 <_ZNSsixEj@plt>

既然都是i+2,就把for循环改一下:

input = "0x123";

for(int i = 2;i < input.size() ;i++)

{

if(input[i] >= 'a' && input[i] <= 'f')

{

iTemp = input[i] - 'a' + 10;

}else if(input[i] >= 'A' && input[i] <= 'F')

{

iTemp = input[i] - 'A' + 10;

}else if(input[i] >= '0' && input[i] <= '9')

{

iTemp = input[i] - '0';

}

iResult = iResult * 16 + iTemp;

换此处

}

可读性可能略差一筹,但是这样执行效率更高:

>x0x8048937 <main()+355> mov 0x1c(%esp),%eax x

x0x804893b <main()+359> mov %eax,0x4(%esp) x

x0x804893f <main()+363> lea 0x10(%esp),%eax x

x0x8048943 <main()+367> mov %eax,(%esp) x

x0x8048946 <main()+370> call 0x8048674 <_ZNSsixEj@plt>

少了一次地址偏移量的计算!

网址:C/C++语言执行效率的优化方法(待续) https://www.yuejiaxmz.com/news/view/788603

相关内容

c语言时间超限求优化
【C++游戏代码优化秘法】:执行效率提升的7个编码实践
C语言程序优化工作流程的注意事项
C语言优化技巧
【宝藏系列】嵌入式 C 语言代码优化技巧【超详细版】
C语言在生活中的应用 …
如何用c语言解决日常生活问题
提高C++程序运行效率,减少运行时间的方法
C 语言程序设计心得:编程之路的探索与收获
C语言与编程,一道未解之谜?

随便看看