全局/静态变量初始化为0放在bss段还是data段
2015-06-18 20:46
225 查看
2013-6-4上午去面试,被鄙视了,技术公司大牛的风范,好犀利!不过我这题应该是蒙对了。。
如:static unsigned char s_test = 0;
这个静态变量是放到bss段还是data段呢,以下是我编译的结果:(全局变量也是如此)
1.看这样子,即使是初始化了,但是初始化的是0,还是放在bss段的
2.这里还有一个问题,即使是全局定义了一个变量,若后面程序不使用的话,还是默认不分配这个变量空间的.(兔子注:应该是被代码优化掉了,而不是不分配)
(至少说ARM的ADS编译器是如此,是否具有普遍性,暂时还不知道 - - ! )
3.注:
可执行程序包括BSS段、数据段、代码段(也称文本段)。
BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。
注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量。
UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out。
来源:http://blog.csdn.net/zhengxianghdu/article/details/9022867
如:static unsigned char s_test = 0;
这个静态变量是放到bss段还是data段呢,以下是我编译的结果:(全局变量也是如此)
1.看这样子,即使是初始化了,但是初始化的是0,还是放在bss段的
2.这里还有一个问题,即使是全局定义了一个变量,若后面程序不使用的话,还是默认不分配这个变量空间的.(兔子注:应该是被代码优化掉了,而不是不分配)
(至少说ARM的ADS编译器是如此,是否具有普遍性,暂时还不知道 - - ! )
3.注:
可执行程序包括BSS段、数据段、代码段(也称文本段)。
BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。
注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量。
UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out。
来源:http://blog.csdn.net/zhengxianghdu/article/details/9022867
相关文章推荐
- 京东成都研究所奋战618
- OC11_自动释放池
- 吸费电话致富 加值电话合作 声讯电话平台
- Bean对象封装,数据分离
- win8下uboot启动卡制作
- 分布式版本管理git学习资料整理推荐
- 第15周上机实践项目1——用二进制文件处理学生成绩
- UVA 156 Ananagrams
- 黑马程序员——集合框架
- startActivityForResult和setResult详解
- 创世纪
- 自学Lua(1)--Lua语法特点
- 关于nginx配置的不完全总结
- OC10_数组的内存管理
- Redis命令学习-Set(集合)
- 在Ubuntu系统中搭建本地openstack(icehouse)源
- 深入理解学习Git工作流
- 夕甲甲——孔乙己之C++版
- OC9_字符串的内存管理
- Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件