如何使Dev C ++下编译的程序更小?

时间:2013-02-20 20:12:44

标签: c++ performance compiler-construction dev-c++

我使用的是5.4.0版,最简单的程序(空屏)几乎有一兆字节。 例如,在编译之后,这个简单的程序有1 276 KB。但删除#include使文件非常小:27 KB。

#include<iostream>
using namespace std;

int sum(int a){
    if(a>1) 
        return sum(a-1)+a;
    else
        return 1;
}

int main(){

    int a=1;

    while(a>=0){
        cout<<"a = ";
        cin>>a;
        cout<<"1+...+a = "<<sum(a)<<endl;
    }

    return(0);
}

在我看来,应该可以为上面生成一个小得多的可执行文件。我该如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

以下是我的经验中的一些想法:

死码

查看所有源代码并删除未使用的代码,包括未执行的未使用的函数和语句块。使用静态代码分析器来帮助找到它们。

printf的

除非必要,否则请勿使用printf。 它涉及很多代码,特别是对于格式化浮点数。

链接未使用的功能

您的编译器是否在库文件中使用未使用的函数? 有些编译器链接在整个库文件中,而不仅仅是从中使用的函数。

调试与发布指标

您是在测量调试(带符号)还是释放(无符号)? 您是在测量静态库版本还是仅测量没有动态库的代码?

内联函数

查看任何内联功能 将较大的内联函数转换为非内联函数。

模板

从模板和函数中删除公共代码。

静态&amp;全局初始化变量

减少静态和全局初始化变量的数量 初始化会占用可执行文件中的空间。 尽可能将常量变量声明为static const

字符串和文字

将常用文本文字放入一个文件中,并返回对它们的引用或常量指针 这将有助于编译器跨模块合并重复的字符串。

公共代码片段

分析公共代码片段的功能。将它们分解为单独的函数或方法。

动态库

将一些功能移动到动态库中。让操作系统确定何时使用代码。

未来功能

删除与当前未执行的未来功能相关的所有代码。

将数据移至数据文件

数据占用了可执行文件的空间,尤其是用于初始化静态或全局变量的值。考虑将数据移动到文件并按需加载数据。


其中一些建议会缩小您的可执行文件,但不会缩小应用程序,例如数据文件和动态库。它们将是您的程序执行所必需的,但可执行文件中可能不需要它们。

某些建议会降低应用程序的性能。对不起,这是时间/内存权衡:您可以节省内存但是需要更多的执行时间(例如打包字段)。