免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
发表于 2010-12-21 23:19 |显示全部楼层
8、        全局变量a赋初值5和不赋值两种情况,对生成的可执行文件大小有什么影响?假如是函数内的局部变量b呢?为什么?

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

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

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

请高手解答!

论坛徽章:
0
发表于 2010-12-21 23:33 |显示全部楼层
depend on

论坛徽章:
0
发表于 2010-12-21 23:39 |显示全部楼层
depend on
sagasw 发表于 2010-12-21 23:33



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

谢谢!

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

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

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

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 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
发表于 2010-12-22 01:28 |显示全部楼层

局部变量

限制如上。

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

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

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

论坛徽章:
0
发表于 2010-12-22 02:32 |显示全部楼层
呵呵,这是一个公司的面试题里面的!

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

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

谢谢各位大侠了!

论坛徽章:
0
发表于 2010-12-22 09:17 |显示全部楼层
建议看下《程序员的自我修养》,你就全明白了。

论坛徽章:
0
发表于 2010-12-22 09:30 |显示全部楼层
5楼说的很对,全局的变量在赋非零初值与否的主要是data段与bss段的不同

论坛徽章:
0
发表于 2010-12-22 10:36 |显示全部楼层
应该和运行时占内存大小  有关
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP