蓝冠注册《Q374919》通常嵌入式系统程序员和拳击手不会有太多的比较。然而,在一个方面,他们做到了。拳击手需要在特定的体重范围内战斗,蓝冠 所以他们的挑战是在特定的体重范围内最大化他们的表现(锻炼肌肉)。嵌入式系统也是类似的;它们只有有限的内存,您需要在这些限制内最大化性能。
通常嵌入式系统程序员和拳击手不会有太多的比较。然而,在一个方面,他们做到了。拳击手需要在特定的体重范围内战斗,所以他们的挑战是在特定的体重范围内最大化他们的表现(锻炼肌肉)。嵌入式系统也是类似的;它们只有有限的内存,您需要在这些限制内最大化性能。
通常,提高性能的代码优化也会减少内存大小(通过减少需要存储的代码数量)。冒着过分夸张的风险,一个相当曲折的类比,蓝冠官网 也许这类似于平角裤减肥。然而,一些优化需要权衡;它可以更快,也可以更小。做出这个决定是很困难的,这取决于我们正在编写的应用程序,但是值得注意的是哪些优化属于这一类。本文将介绍我们可能遇到的一些主要的空间与速度权衡优化。
假设我们想计算一个8位无符号值x的sin(x/256)(即,输入表示范围为0.0到1.0的值)。一种方法是计算函数的多项式近似值。这可能是5-20条指令的顺序,这取决于架构。
另一种选择是使用查找表。该表的大小将取决于所需的输出精度,但假设我们想要16位的输出,那么该表将是256 * 16位= 512字节。这可以减少计算到1或2条指令,但以牺牲内存为代价。
在上述情况下,如果需要那些sin计算的速度(记住——先配置文件,再优化),那么额外的内存可能是值得的。然而,在某种意义上,这种情况是幸运的,因为输入只有8位。如果输入是16位,那么就需要128KB的内存(比许多微控制器的内存还多)。
查找表的大小与输出的比特数成线性关系,蓝冠注册 与输入的比特数成指数关系。所以输入的比特数是关键因素。
对于某些算法,还可以采用混合技术,即同时进行查找和一些计算。在这些情况下,我们有时可以用查找所用的比特数和之后的计算量进行权衡。一个例子是使用查找得到一个函数的初始估计(例如1/x),然后使用迭代优化得到一个精确的解。