【发布时间】:2011-06-01 16:00:18
【问题描述】:
我正在为微控制器开发一种动态语言(编译成 C++),作为一名 CS 人,我决定先正确地完成它,然后再担心优化。下面是我的对象系统的结构,
Base (Interface)
|
|---- Number (Interface)
| |
| |-- Int
| |-- Float
|
|---- Char
|
|---- Sequence (Interface)
| |
| |-- LinkedList
|
|---- Function (Interface)
|
|-- Built-in Functions (Functors)
现在一切正常,生成的代码大小开始成为问题,每个操作都必须由函子表示,(+,- while,for 等..) 所以我猜这是导致代码大小增加的原因或者我将所有内容作为基类传递,然后根据需要进行转换,因此我有很多转换,目前一个简单的 LED 开/关循环花费 15 KB,即使它不使用所有对象类型(6 个函子 + 4 个整数)。
我尝试了各种 avr-gcc 选项,但没有减少代码大小。所以我想知道我怎样才能弄清楚代码的哪一部分占用了这么多空间?
【问题讨论】:
-
当您不显示实际生成的代码时,很难回答。您能否在 LED 开/关循环中发布 C++ 代码?
-
您没有向我们提供足够的信息来告诉您问题所在(我不确定向我们提供信息是否可行)。我们或许可以提出如何找到问题的建议。 (另外,如果你有两个开/关循环,代码大小是 15.1kB 还是 30kB?)
-
@David 如果我使用两个相同的循环对应于 while(1){ turnOf; turnOff;} 相差 3 kbytes。
-
确保使用优化运算符 '//' ;-)
-
效果如何?
标签: c++ optimization