0

我已经用 C 语言为 ATmega128 编写了代码,并且

我想知道我在代码中所做的更改如何影响程序内存。

更具体地说,让我们考虑代码与该代码类似:

   d=fun1(a,b);
   c=fun2(c,d);

我在代码中所做的更改是我多次调用相同的函数,例如:

   d=fun1(a,b);
   c=fun2(c,d);
   h=fun1(k,l);
   n=fun2(p,m);
   etc...

我在 AtmelStudio 6.1 上构建了解决方案,我看到了程序存储器中的变化。

无论如何,在没有构建解决方案的情况下,是否可以预见代码中的变化将如何影响程序内存?

谢谢!!

4

1 回答 1

0

一般来说,使用 C/C++ 几乎是不可能的(这意味着努力不会得到回报)。

在您的简单情况下(调用次数增加),您可以确定每次调用的指令数,然后乘以该数。这只有在编译器没有在所有情况下都内联并且不在更高级别应用优化的情况下才是正确的。

如果您升级到较新的gcc版本,这些计算可能是错误的。

所以通常你只有在比较两个版本(相同的编译器版本,相同的优化)时才能得到准确的数字。avr-sizeavr-nm为您提供所有信息,例如按大小比较函数。您可以自动执行此任务(通过将输出转换为 .csv 文件),并使用电子表格或diff查找更改。

如果您必须将程序压缩到更小的设备中(例如,从 4k 闪存到 2k - 您已经有 128k 闪存,那已经很多了),这种方法通常只会有回报。

这个过程是令人沮丧的,因为如果你在 C 中应用相同的设计模式但有微小的差异,它可能会导致不同的大小:所以从 C/C++ 开始,你无法真正预测会发生什么。

于 2013-06-27T14:26:45.130 回答