论文部分内容阅读
随着嵌入式系统对内存空间需求的增大,程序的代码密度也逐渐成为掣肘嵌入式设备发展的关键因素。代码密度是衡量可执行文件占用内存空间大小的重要参数,它不仅取决于编译器的优化算法,还与处理器的指令集有着密切相关的联系。例如,相比于32位的ARM指令,X86上的程序往往具备更高的代码密度。此外,代码密度的提升可以增加缓存和带宽的利用率、降低功耗,进而提升最终的性能。基于此,本文从以下两方面展开研究:1.地址立即数编译优化针对某些地址常量的相似性,本文提出了拆分-共享的优化策略。首先对地址常量进行拆分,提取出常量的基址部分,以此达到降低常量数量的目的;其次对函数间的常量池进行相似度分析,对具备公共常量的相邻函数进行常量池合并,必要的话重新调整函数的顺序,实现在多个函数之间实现常量池共享。2.多内存访问指令优化传统的多内存访问算法SOLVEMMA采取了有向图模型,并在最优路径的选取过程中标注节点的方向属性。它的产生源于DSP中的SOA算法,并不完全符合当今嵌入式处理器的应用场合。本文提出更为简洁的无向图访问模型,并结合分类排序的思想大幅度降低排序的计算复杂度。最后,文章借助GCC的编译框架,将优化算法得以实施。实验表明,与原始的优化方法相比,文章提出的算法对代码密度有着普遍地提升效果。