如何让Dev C++下编译的程序更小? [已关闭]

问题描述 投票:0回答:1

我使用的是5.4.0版本,最简单的程序(空屏)几乎有1兆字节。 例如,下面这个简单程序编译后有 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);
}

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

c++ performance dev-c++
1个回答
1
投票

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

死代码

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

打印

除非必要,否则不要使用

printf
。 它包含大量代码,特别是用于格式化浮点数的代码。

链接未使用的函数

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

调试与发布指标

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

内联函数

查看所有内联函数。
将较大的内联函数转换为非内联函数。

模板

将通用代码从模板中删除并放入函数中。

静态和全局初始化变量

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

static const

字符串和文本

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

常用代码片段

分析常见代码片段的函数。 将它们分解为单独的函数或方法。

动态库

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

未来功能

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

将数据移动到数据文件

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


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

一些建议会降低应用程序的性能。 抱歉,这是时间/内存的权衡:你可以节省内存,但会花费更多的执行时间(例如打包字段)。

© www.soinside.com 2019 - 2024. All rights reserved.