编译出来的.exe大小和什么有关?

sendltd 2007-01-16 10:20:46
是什么影响最后编译出来的文件大小?
(全局)变量大小对解决有影响吗?
...全文
911 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
tom56 2007-03-04
  • 打赏
  • 举报
回复
全局变量如果定义时初始化了,会增大文件的大小,跟代码量有关系。
未初始化的变量不会占用exe文件大小,当然跟编译选项也有关系,有的编译选项可以生产压缩型文件。
merlinfang 2007-03-04
  • 打赏
  • 举报
回复
与code和全局变量,静态变量等相关

如果全局变量,静态变量多且大的话,大都库的大小和其差不多了
lei001 2007-03-04
  • 打赏
  • 举报
回复
与code和全局变量,静态变量等相关
迷你苑 2007-03-04
  • 打赏
  • 举报
回复
包含的内容太多
Arthur_ 2007-03-03
  • 打赏
  • 举报
回复
一般Debug配置,在prog2中:

_DATASEGMENT
?ar@@3PAHA DD01H; ar
DD02H
DD03H
ORG $+1199988
_DATAENDS

在prog1中:

_BSSSEGMENT
?ar@@3PAHA DD0493e0H DUP (?); ar
_BSSENDS

区别很明显吧,呵呵,总结一下:

全局的未初始化变量存于.bss段中,
全局的已初始化变量存于.data段中,
函数内的自动变量都在栈上分配空间。

.data段占用文件空间,而.bss段和stack是不占用文件空间的
==============================
静态变量位于那个段?
Arthur_ 2007-03-03
  • 打赏
  • 举报
回复
是否使用了宏,代码是否优化
AAdai 2007-03-03
  • 打赏
  • 举报
回复
试了一下,用的VC2005
prog1: debug版:1478656B release版:1216512B
prog2: debug版:40960B release版:20480B

奇怪,怎么会相差这么大呢?
blue_zyb大哥(大姐)能不能给讲讲,谢谢了

怎么查看呀
todototry 2007-03-03
  • 打赏
  • 举报
回复
mark
iambic 2007-03-03
  • 打赏
  • 举报
回复
>>另外,有人说不用关心目标代码的大小,这个观点不是错,但是狭隘了。
>>Win32下可以这么说,但是在16bit的系统中开发程序就会遇到64K的问题。

确实是狭隘了。应该加个限定时间:二十一世纪。
FreshBird 2007-03-03
  • 打赏
  • 举报
回复
学习...
vanter 2007-03-01
  • 打赏
  • 举报
回复
让编译器产生.map文件,就可以看到目标程序中各个段中放了什么东西,及其大小。
从而可以通过修改程序达到缩小目标代码大小的目的了。

以我做过的项目为例子,我找到了.map文件中同时存在malloc和calloc的代码段,我就把我程序中的malloc都用calloc替代掉,不但可以省去memset,而且可以节约malloc占用掉的代码段的空间。

另外,有人说不用关心目标代码的大小,这个观点不是错,但是狭隘了。Win32下可以这么说,但是在16bit的系统中开发程序就会遇到64K的问题。
x2304 2007-02-25
  • 打赏
  • 举报
回复
和链接进的资源多少也有关。
bombwang 2007-02-24
  • 打赏
  • 举报
回复
路过
guoshanhe 2007-02-24
  • 打赏
  • 举报
回复
谢谢楼上的各位了!
neoragex2002 2007-02-22
  • 打赏
  • 举报
回复
一般Debug配置,在prog2中:

_DATA SEGMENT
?ar@@3PAHA DD 01H ; ar
DD 02H
DD 03H
ORG $+1199988
_DATA ENDS

在prog1中:

_BSS SEGMENT
?ar@@3PAHA DD 0493e0H DUP (?) ; ar
_BSS ENDS

区别很明显吧,呵呵,总结一下:

全局的未初始化变量存于.bss段中,
全局的已初始化变量存于.data段中,
函数内的自动变量都在栈上分配空间。

.data段占用文件空间,而.bss段和stack是不占用文件空间的
无忧石头 2007-02-22
  • 打赏
  • 举报
回复
如果你是用vc的话,那跟你选择的优化选项有关系,如果你选择最小尺寸,那编译出来的应该是最小的
neoragex2002 2007-02-22
  • 打赏
  • 举报
回复
呵呵,用cl中的/FA选项生成一下汇编代码,自己看吧
w2001 2007-02-22
  • 打赏
  • 举报
回复
prog1里面的ar[300000]除了前6个要预设初值之外,剩下的300000-6个int也要赋成0值,so直接是当作常量区直接编进程序的,prog2不需定义常量,简单了,直接修改偏移即可
guoshanhe 2007-02-20
  • 打赏
  • 举报
回复
blue_zyb() ( ) 信誉:100 Blog 2007-1-17 10:59:04 得分: 0
----------------------------------------------------------------
lz可以试着生成下面两个小程序对应的exe,看一下谁占的内存多

prog1:

int ar[300000] = {1, 2, 3, 4, 5, 6 };
void main()
{
...
}

prog2:

int ar[300000];
void main()
{
...
}

////////////////////////////////////////////////////////////////////

试了一下,用的VC2005
prog1: debug版:1478656B release版:1216512B
prog2: debug版:40960B release版:20480B

奇怪,怎么会相差这么大呢?
blue_zyb大哥(大姐)能不能给讲讲,谢谢了
htqx 2007-02-19
  • 打赏
  • 举报
回复
编译环境有关。
加载更多回复(6)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧