免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9034 | 回复: 15
打印 上一主题 下一主题

C语言中全局变量,局部变量赋值民否对编译可执行文件大小的影响! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-21 23:19 |只看该作者 |倒序浏览
8、        全局变量a赋初值5和不赋值两种情况,对生成的可执行文件大小有什么影响?假如是函数内的局部变量b呢?为什么?

遇到这样一个问题,全局变量,赋值与否对编译后的可执行文件大小影响为4个beta。

而局部变量赋值与否对编译后的可执行文件大小影响为16个beta。

为什么,一直没有想明白,

请高手解答!

论坛徽章:
0
2 [报告]
发表于 2010-12-21 23:33 |只看该作者
depend on

论坛徽章:
0
3 [报告]
发表于 2010-12-21 23:39 |只看该作者
depend on
sagasw 发表于 2010-12-21 23:33



   什么意思?能不能详细说明一下!

谢谢!

论坛徽章:
0
4 [报告]
发表于 2010-12-22 00:45 |只看该作者
各种编译器编译选项、优化选项,以及你所链接的静态库都会影响文件的大小。
而且,没有人关心变量与可执行文件大小之间的关系,基本上不搭边。

如果你关心可执行文件大小,可以通过调整编译选项,压缩可执行文件来完成。

如果说少写几个变量就能省了文件大小,那我很佩服提出这个想法的仁兄,太牛!

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
5 [报告]
发表于 2010-12-22 01:23 |只看该作者

全局变量

作一些限制:

1. 全局变量类型为int
2. sizeof(int)==4
3. elf格式

int v = x;
只要x不为0, v就会在.data段里占据4字节空间, 内容是x。
x等于0, 或者没有赋初始值; v就不在.data段, 而是.bss段。

.bss段的内容在文件映像中不实际存在, 文件映像中只保留它的总大小。

全局变量不赋初值, 节省的就是这4bytes。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
6 [报告]
发表于 2010-12-22 01:28 |只看该作者

局部变量

限制如上。

初始化工作需要一些指令去完成, 会增加.text段的大小。

4bytes, 16bytes, 说得也太绝对了。
而且这些段并不是实际使用多少就占用多少, 会有填充的。

要么lz题目没抄完整, 要么出题人就是林锐那种半罐水不懂装懂的。

论坛徽章:
0
7 [报告]
发表于 2010-12-22 02:32 |只看该作者
呵呵,这是一个公司的面试题里面的!

别人给我的,可能是没有给我全吧,

既然别人问起来了,我就搞清楚一下!

谢谢各位大侠了!

论坛徽章:
0
8 [报告]
发表于 2010-12-22 09:17 |只看该作者
建议看下《程序员的自我修养》,你就全明白了。

论坛徽章:
0
9 [报告]
发表于 2010-12-22 09:30 |只看该作者
5楼说的很对,全局的变量在赋非零初值与否的主要是data段与bss段的不同

论坛徽章:
0
10 [报告]
发表于 2010-12-22 10:36 |只看该作者
应该和运行时占内存大小  有关
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP