下载此文档

使处理器运行的频率降到最低;消耗尽量少的内存,使内存.doc


文档分类:通信/电子 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
开发运行在SoC内的嵌入式处理器内核的程序时,工程师有两个主要目的:运行得足够快,使处理器运行的频率降到最低;消耗尽量少的内存,使内存开销降到最小。对于不同的项目,有时候这两个因素的重要性会不一样。下面两个关键因素极大地影响着设计团队满足这些目标的能力:开发源程序的编译器对代码的优化效率以及用于开发源代码的编程风格。本文将深入地讨论这两种因素,并提出一些创建小而快的C程序的建议。编译器原理编译器通常是由前端和后端两部分组成。前端通常是指语法和语义的处理过程,后端通常是指优化、代码生成,以及针对特定处理器的优化过程。很多好的编译器后端依赖于多层的中间表述(IR)。优化和代码生成从高层(类型输入程序的句法)到低层逐级地传递中间表述。与处理器无关的优化一般倾向于在编译过程的早期在较高IR层上实现,而针对特定处理器的优化一般倾向于在编译过程的后期在低层IR上来实现。信息通过不同IR层向下传递,这样低层优化可以充分利用编译器早期处理得到的高层信息。/C++编译器包含四个基本的优化级,从-O0到-O3,对应着不断提高的优化级别。表1描述了这些级别及其相对应的代码大小和内部过程分析(IPA)。缺省情况下,XCC编译器一次优化一个文件,但是它也可以执行内部过程分析(通过加入IPA的编译选项)。当在多个原文件上优化整个应用程序时,优化将会被延迟到链接的步骤之后进行。表2描述了当前编译器(编译器)支持的优化内容部分列表。XCC编译器还可以利用编译产生的性能分析数据。性能分析的反馈可以帮助编译器减轻分支跳转的延迟。另外,反馈可以让编译器只是插入那些最常用的函数(inline),并且妥善处理常用代码段中寄存器溢出的问题。因此,编译器在所有地方进行正常优化的同时,还可以通过优化应用中的临界部分进行加速。一些有用的C编码规则为了利用编译器得到最好的性能,编程人员需要像编译器一样思考问题,并且理解C语言和目标处理器之间的关系。下面的一些基本原则可以帮助所有嵌入式编程人员在不需很大努力的情况下获得性能好很多的编译代码。。编译器设置了—S或者-save-temps编译选项,编译将产生汇编输出并且还有一些为了理解而添加的注释。对于那些性能要求很高的代码,你可以观察编译结果是否符合你的期望。如果不是,请考虑以下规则。,这增加了混淆出现的机会,这允许程序用很多种方法去引用同一数据对象。如果全局变量的地址被作为子程序的参数传递,这个变量可以通过它的名字或者通过指针被引用。这就是一种混淆,编译器必须保守地把这样的数据对象保存在内存中而不是寄存器中,并且仔细地保持代码中可能引起混淆的变量的访问顺序。考虑下面的代码:voidfoo(int*a,int*b){inti;for(i=0;i<100;i++){*a+=b[i];}}您会设想编译器应该产生代码是在循环开始前将*a保存到一个寄存器里面,并且在循环中把b[i]保存到一个寄存器里面然后将它加到*a所在的寄存器里。但事实上却是,编译器产生的结果是*a被放置在内存里面,因为a和b可以产生混淆情况,*a也许是b数组的一个元素。虽然看起来在这个例子中不太可能出现这种混淆,但是编译器是没法确定这种情况是否会发生的。有几个技巧可以针对混淆的情况,帮

使处理器运行的频率降到最低;消耗尽量少的内存,使内存 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人373116296
  • 文件大小542 KB
  • 时间2019-08-22