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

浙公网安备 33010602011771号