实例说明C语言中初始化和未初始化的全局变量所在不同的段
一个程序:
Makefile:
objs := bss.o
all: bss
bss: $(objs)
gcc -o bss_elf bss.c
objdump -D bss_elf > bss.dis
clean:
rm -f bss_elf bss.dis *.o
主程序:
/*
* bss.c
*
* Created on: 2013-5-16
* Author: root
*/
int g_val;
void changeVal()
{
int a;
a = 1;
g_val = 4;
}
int main(void)
{
changeVal();
return 0;
}
下边是我根据不同的g_val的值进行编译,查看
bss.dis来看所在不同的段:
通过实现可以准确的说明:
.bss段是放未初始化或者初始化为0的全局变量;
.data段是存放初始了且不为零的全局变量。bss段中的值全部赋为了0。程序中就不存在没有初始化的全局变量了,你不初始化,bss段也会帮你初始化为0。
这样做一次实验超过看好多次书!