- #include<stdio.h>
- /*int a[30]*/ /*存储在非初始化数据段(.bss)*/
- /* */
- /*int a[30]={10,10,10,10,10};*/ /*存储在初始化数据段(.data)*/
- int main()
- {
- printf("hello world/n");
- return 0;
- }
$ ls -l 分别查看其大小容易发现:/* int a[30] */比/* */时多18个字节,这些字节是系统用于标记未初始化变量大小,属性等信息的开销。
通过测试这段代码易理解:初始化数据段在编译时确定该段大小,bss段中的内容并不作为程序文件的一部分,而被保存到外存中。
最后:(.data)包含明确给定值的全局变量和静态变量。
(.bss)包含没有明确给定值的全局变量和静态变量。