减少C ++代码大小

时间:2011-06-01 16:00:19

标签: c++ optimization

我正在研究一种用于微控制器的动态语言(编译成C ++),作为CS的人我决定先正确地做,然后再担心优化。下面是我的对象系统的结构,



Base (Interface)
|
|---- Number (Interface)
|      |
|      |-- Int
|      |-- Float
|
|---- Char
|
|---- Sequence (Interface)
|      |
|      |-- LinkedList
|
|---- Function (Interface)
      |
      |-- Built-in Functions (Functors)

现在一切正常,生成的代码大小开始出现问题,每个操作都必须用仿函数表示,(+, - while,for etc ..)所以我猜这会导致代码大小的增加或者我将所有内容作为基类传递,然后根据需要进行转换,因此我有很多强制转换,目前一个简单的led开/关循环花费15千字节,即使它不使用所有对象类型(6个仿函数+4个整数)。 / p>

我尝试了各种avr-gcc选项,但没有减少代码大小。所以我想知道如何弄清楚代码的哪一部分消耗了这么多空间?

2 个答案:

答案 0 :(得分:7)

在链接步骤中,您应该让avr-gcc生成一个地图文件,以便您可以查看它并查看占用太多空间的内容。

请务必使用-ffunction-sections编译选项和-Wl,-gc-sections链接器选项从二进制文件中删除未使用的函数。

您使用的是C ++的哪些功能?其中一些(如类和命名空间)很便宜,而另一些则非常昂贵(例如异常处理)。接口和虚函数比只有类和子类更昂贵。

我曾经看过一个名为“C ++的低效率:事实还是虚构?”的好话。由IAR制作。它经历了C ++的每个高级功能并为其分配了成本。它主要面向为ARM体系结构开发的人员,但它仍然对您有价值。以下是幻灯片: http://www.carnica-technology.com/download/InefficiencyofC++.pdf

答案 1 :(得分:1)

除了支持David的建议外,还有一些简单的评论:确保你没有在调试模式下进行编译,并且从可执行文件中删除所有符号以将其大小减小到最小。

相关问题