嵌入式系统中的函数内联与闪存性能优化
嵌入式系统函数内联
在嵌入式系统中,由于内存空间有限,程序代码大小和系统性能之间需要进行精细的权衡。传统的函数内联算法,如 OptinlineVector 算法,虽然能找到函数内联的最优解,但所需的时间和内存空间巨大,其最坏情况复杂度与程序中函数的总数 N 呈指数关系。
为了解决这个问题,提出了一种新的函数内联方法,该方法在源代码级别工作,最坏情况下所需的时间和内存空间为 N 的立方。
系统模型
在普通系统中,性能提升是主要目标,函数内联带来的代码膨胀问题往往不被重视。但在嵌入式处理器中,代码膨胀成为一个严重的问题,过大的代码是不可容忍的。因此,需要有选择地进行函数内联。
为了实现有选择的内联,引入了一个概念——rebate_ratio,其定义为:
[
rebate_ratio = \frac{function_calling_frequency}{code_size_increased}
]
函数调用频率与性能提升成正比,而代码大小膨胀则相反。在某些情况下,代码大小增加量可能为零,此时将该函数的 rebate_ratio 设为最大值,并优先进行内联。
对于给定的 C 程序,使用图 G=(V,E) 来表示其内部的函数调用结构。每个节点 $v_i$ 代表一个函数 $f_i$,每条边 $e=(v_i,v_j) \in E$ 表示函数 $f_i$ 调用 $f_j$。每个节点 $v_i$ 有一个二元组属性 $v_i: (B_i, R_i)$,其中 $B_i$ 表示函数 $f_i$ 的实际大小,$R_i$ 是函数 $f_i$ 的 rebat
超级会员免费看
订阅专栏 解锁全文
46

被折叠的 条评论
为什么被折叠?



