社区首页 >问答首页 >哪些内容/因素会增加C++程序可执行文件的大小?

哪些内容/因素会增加C++程序可执行文件的大小?
EN

Stack Overflow用户
提问于 2020-08-09 15:03:00
回答 1查看 249关注 0票数 1

谁能详细解释一下,在C++中,究竟是什么因素增加了可执行文件的输出大小?我从测试中知道的增加文件大小的东西是,包括库和内置的变量类型。我也在这里看到过构建模式(发布与调试)也会增加exe文件的大小?我不确定的是,像int这样值为5的变量,vs值为100,000,000的int变量中的实际值大小是否会增加exe大小,程序中的实际行数(取决于行的内容)是否会起作用,还有哪些其他因素会增加.exe文件的大小。

EN

回答 1

Stack Overflow用户

发布于 2020-08-09 15:16:43

  1. 调试vs Release

在debug模式下,有时在.exe文件中有debuginfos,有时在外部pdb文件中。(取决于使用的编译)。此外,通常调试模式的优化较少,使用的指令要多得多。(比如经常不必要地加载和存储变量)。另一方面,在发布版本中,会应用一些优化。它们可以同时具有这两种效果。它们要么增加文件的大小(如函数内联或循环展开),要么减小文件的大小(删除不必要的指令或合并它们)。此外,在发布版本中,符号经常被剥离。

  1. 静态链接与动态链接

如果静态链接,所有需要的文件/函数都包含在最终的可执行文件==>较大的可执行文件(通常)中。如果动态链接,则最终可执行文件中只有一个对库的引用,因此文件大小较小。

  1. (特定于C++)模板

模板确实增加了文件的大小,因为对于每种类型,在应用模板的地方,都必须生成机器码。正因为如此,如果你大量使用模板(比如使用Boost),你会得到一个很大的可执行文件。

我不确定的是,像

这样值为5的变量与值为100,000,000的变量中的实际值size是否会增加exe大小

这不会有什么区别,因为两者都需要4个字节。除非编译器决定进行优化,只对5使用一个字节。如:

代码语言:javascript
代码运行次数:0
复制
mov al, 5 ;(Save some bytes)
vs
mov eax, 5

如果程序中的实际行数...扮演着重要的角色

是的,更多的行,更多的代码。但是您不能将代码行转换为可执行文件的大小。考虑一下:

代码语言:javascript
代码运行次数:0
复制
void foo(int a,
         int b,
         int c,
         double d) 
{
    if (a<50)
    {
      baz(a);
    }
    //Do something
}

vs

代码语言:javascript
代码运行次数:0
复制
void foo(int a,int b,int c, double d){
   if(a<50) baz(a);
}

所有这些都将编译成相同的代码。此外,注释不会计入可执行文件,除非编译器决定将注释添加到可执行文件中(我不知道有任何编译器会这样做)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63327854

复制
相关文章
输出9*9口诀
输出9*9口诀 //题目:输出9*9口诀。 #include int main() { int i,j,result; printf("\n"); for (i=1;i<10;i++) { //一排一排的打印! 举个例子:第一排打印1*1 第二排就打印 2*1 2*2 for(j=1;j<=i;j++) { result=i*j; printf("%d*%d=%-3d",i,j,
川川菜鸟
2021/10/18
4090
for循环输出杨辉三角
/** @author 葆宁 @time 2019.3.14 */ public class Example { public static void main(String[] args) { int triangle[][]=new int[8][];// 创建二维数组 // 遍历二维数组的第一层 for (int i = 0; i < triangle.length; i++) { triangle[i]=new int[i+1];// 初始化第二层数组的大小 // 遍历第二层数组
葆宁
2019/04/19
9550
for循环输出杨辉三角
输出三角形
题目:输出一个三角形 基本思想: 输出图形 首先要知道顶点个数, 然后要判断间隔,k<n-i 最后*的个数是2n-1个 代码实现: private static void triangle(int n) { for(int i=1;i<=n;i++) { for(int k=0;k<n-i;k++) { System.out.print(" "); } for(int j=1;j<=2*i-1;j++) { System.out.print("*"); } System.o
呆呆
2021/10/07
6100
C语言 | 输出杨辉三角
例26:C语言实现输出杨辉三角。 解题思路:对于这道题,小林拆分为3部分进行讲解 第一部分,对有特点的数(每行开头和结束的数都是1)进行赋值: for(i=0;i<10;i++)//for循环    {     array[i][i]=1;//给二维数组的每一行的最后一个赋值为1      array[i][0]=1;//第二维数组的每一行的开头赋值为1    } 第二部分,给中间的数进行赋值: for(i=2;i<10;i++)//外层循环限制行    {     for(j=1;j<=i-1;j++)/
小林C语言
2020/12/04
2.7K0
C语言 | 输出杨辉三角
tslint pre-commit 配置教程
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j_bleach/article/details/78309599
j_bleach
2019/07/02
1.4K0
tslint pre-commit 配置教程
升级Gradle 3.0重命名Apk并输出指定目录
背景是工程之前用的2.2.2版本,gradle-wrapper是gradle-2.14.1-all,这个版本的重命名apk和输出指定目录如下代码:
巫山老妖
2019/03/04
1.3K0
升级Gradle 3.0重命名Apk并输出指定目录
java利用for循环输出正三角新解
本人在重新学习Java的过程中,遇到一个作业,就是用循环输出正三角,在完成作业之余,查看了很多网上的答案,用了好几次for循环,基本思路就是先拼接前面的空格,在去拼接后面的“”符号。感觉有点捉急,自己想了一想新的办法来更少的循环来得到答案。我利用一个if-else判断,以三角形顶点作为临界点,然后根据输出行数不同,拼接不同数量的空格和“”,分享代码,供大家参考。(一共两个例子,一个是正向的三角形,一个是等边三角形)
FunTester
2019/08/19
2.1K0
如何用C语言输出杨辉三角
题目描述:还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:
小Bob来啦
2020/12/16
1.3K0
如何用C语言输出杨辉三角
C语言——输出9x9乘法表
九九乘法表是比较简单的程序,也是刚入门编程的同学一定会遇到的一个编程题,下面我就来给大家讲讲如何实现它
Gorit
2021/12/09
5600
C语言——输出9x9乘法表
输出杨辉三角(C++和 JAVA版 )
C++版本: #include using namespace std; void main() { int n=10; while(n!=-1) { cout<<"请输入 杨辉三角 行数:"; cin>>n; int **a = new int* [n]; for(int m = 0; m < n; m++) { a[m] = new int [n]; } for(int i=0;i 效果: JAVA版: import j
明明如月学长
2021/08/27
4470
C语言输出各种三角形
有些是有两种方法,一种是通过限制每行星星的个数进行输出,一种是根据数组下标进行输出。
全栈程序员站长
2022/09/15
1.1K0
C语言输出各种三角形
输出三角形【 Java 多线程 】
题目: 利用多线程输出两个三角形,要求控制两个线程的发生,判断第一个线程是否结束。 并且在第一个线程没结束时,使用 sleep 方法或者 join 方法。 1、sleep 方法。 public class Main { public static void main(String[] args) { Test m = new Test(); Thread t1 = new Thread(m, "T1"); Thread t2 = new Thread(m, "T2"); t
Lokinli
2023/03/09
3500
C++函数定义 | 输出有参无参
函上一节小林已经讲过,从函数形式来看,函数分为无参函数和有参函数,那么他们有什么不同呢?
小林C语言
2020/11/30
1.4K0
C++函数定义 | 输出有参无参
28-输出等腰三角形
思路 每行前输出空格的数量 每行空格后*的数量 每行后注意输出换行符 代码 #include <stdio.h> /* 本实例要求从键盘输入任意整数 n,通过程序运行输出对应高度为 n 的等腰三角形 */ void PrintTriangle(int n) { // 输出几行 for (int i = 0; i < n; i++) { // 输出每行前的空格 for (int j = 0; j < n - i -1; j++) {
lexingsen
2022/02/25
2970
练习2-3 输出倒三角图案 (5分)
本题要求编写程序,输出指定的由“*”组成的倒三角图案。 输入格式: 本题目没有输入。 输出格式: 按照下列格式输出由“*”组成的倒三角图案。 * * * * * * * * * * 思路分析: 本题目就是简单的入门,使用printf()函数在控制台打印字符串。 参考代码: #include<stdio.h> int main() { printf("* * * *\n"); printf(" * * *\n"); printf(" * *\n"); printf("
C you again
2021/02/24
9310
C语言数组例题:输出杨辉三角形
杨辉三角:是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。
岳泽以
2022/10/26
1.1K0
C语言数组例题:输出杨辉三角形
java--第9章 输入输出流
1.编写一个程序将字符串“明月松间照,清泉石上流。”写入C:\a.txt中,并实现对该文件的读取。
北山啦
2022/11/27
3050
java--第9章   输入输出流
输出1234无重复三位数
有1,2,3,4四个数字求四个数字能生成多少个互不相同且无重复数字的三位数(不能含有122,133类似)
算法与编程之美
2021/12/15
6260
点击加载更多

相似问题

Linting不为tslint角9的打字本3.7工作

11

跳过tslint警告角

16

TSLint无引用规则替代

129

角JS路由无输出

26

错误无阴影变量- tslint错误

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文