完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前期对C语言进行详细的讲解,相比C语言,一些汇编语言编程方面的知识。 众所周知,优化代码需要花费时间,而且会降低源代码的可读性,所以通常只对经常 被调用且对性能影响较大的函数进行优化。为了找到这些函数,推荐使用大多数ARM编译和调试器都带的性能分析工具。另外,用源代码注释来评注那些不容易理解的优化代码,可以提高代码的可维护性。 C编译器必须逐字逐句地把C程序转换成汇编程序,这样编译器就不会漏掉所有可能的输入,实际上,许多输入组合是不可能的或不会出现的。首先来看一个例子,函数mem-clr() 用来清除从地址data开始n字节的存储单元内容,从这个例子中可以看到编译器会碰到的问题。 Void memclr(char * data,int n) { For(;n>0;n++) { *data=0; Data++; } } 首先,编译器无论多高级,也不可能知道N的输入值是否可以是0,因此,在第一个循环开始之前,编译器需要对这问题进行明确的检查。 其次,编译器也不知道数组指针data是否4字节边界对齐的。如果是4字节对齐的,那么编译器就可以使用int而不是char类型的指针,这样一次可以清楚4字节的存储单元,而且,编译器也不知道N是否是4的整数倍,如果N是4的整数倍,那么编译器可以重复循环体中的内容4次或者利用int类型的指针一次存储4字节。 然而,编译器必须是保守的,只能假定N的所有可能的值和data所以可能的边界值。 为了保证例子的一致性,已经用下面的C编程器测试过所有程序: l ARM Developer suite version 1.1(ADS.1.1)的armcc 可直接从ARM购买这个版本或后续版本的使用许可。 l AEM-elf-gcc version2.95.2 是GMU C编译器的ARM版本gcc,是免费使用的。 使用ADS1.1下的armcc来生成例子中的汇编输出结果,下面的脚本显示了如何对C文件test.c使用armcc。可以使用这种方法来重新生成程序的编译结果。 Armcc-otime-c-o test.o test.c Fromelf-test/c test.o>test.txt Armcc默认是全部优化功能有效,-0time选项表示执行速度优化高于代码空间的优化,这主要是影响编译器针对for和while循环的处理。如果使用gcc编译器,那么下面的脚本可以生成类似的汇编输出: Arm-elf-gcc-02-fomit-frame-pointer-c-o.test.o test.c Arm-elf-objdump-d test.o>test.txt GNU编译器在默认状态下所有优化都是关掉的。-fomit-frame-pointer选项阻止GNU编译器保留结构指针寄存器。结构指针可以帮助调试窗口显示存储器堆栈的局部变量。但是,如果保留,那么效率将会降低。所以对性能有要求的代码就不要使用结构指针。
源地址:http://www.lirenedu.org/index.php?ack=xinwen&id=1111 |
|
相关推荐
|
|
{:soso_e179:}
|
|
|
|
|
|
1004 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3272 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1443 浏览 0 评论
2102 浏览 0 评论
1614 浏览 0 评论
75257 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 18:09 , Processed in 0.623142 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号