我在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上构建了解决方案,并且我看到了程序存储器中的更改。
在没有构建解决方案的情况下,是否可以预见代码中的字符将如何影响程序存储器?
谢谢!
答案 0 :(得分:0)
一般来说,使用C / C ++几乎不可能(这意味着努力不会得到回报)。
在您的简单情况下(呼叫数量增加),您可以确定每个呼叫的指令数量,并乘以数字。如果编译器没有在所有情况下内联 ,并且不在更高级别应用优化,那么这只是正确的。
如果您升级到较新的gcc
版本,这些计算可能会出错。
通常,在比较两个版本(相同的编译器版本,相同的优化)时,您只能得到确切的数字。 avr-size
和avr-nm
为您提供所有信息,例如按大小比较函数。您可以自动完成此任务(通过将输出转换为.csv文件),并使用电子表格或diff
查找更改。
这种方法通常只会付出代价,如果你必须将一个程序压缩到一个较小的设备(例如从4k闪存到2k - 你已经有128k闪存,这是非常多的。)
这个过程令人沮丧,因为如果你在C中应用相同的设计模式并且差异很小,那么它可能导致不同的大小:所以从C / C ++开始,你无法真正预测会发生什么。