本文是一篇关于初始化全局变量的帖子
实例说明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。
这样做一次实验超过看好多次书!
文章结束给大家分享下程序员的一些笑话语录:
姿势要丰富,经常上百度!