新闻  |   论坛  |   博客  |   在线研讨会
浅谈全局变量初始值问题
xinjinlong | 2011-06-22 00:59:48    阅读:12030   发布文章
大家可能都知道,如果定义一个全局变量没有初始化,首次使用该变量的值应该是零,今天就本人理解说一下为什么?
首先要说明这个问题,那应该分析一下一个程序有那几个部分(段)组成:
第一:text段,就是所谓的程序部分,基本执行时text段的内容不会改变,除非有特殊要求。
第二:Read-only-data(rodata)段:说白一点就是程序中长定义的const变量,以及如"Hello word"这样的字符串常量。
第三:Data段:实际就是特指初始化的全局变量。
第四:bss(Block Started by Symbol)段:主要值没有初始化的全局变量
到现在为止,大家应该明白了程序有那几个段组成吧,但是在程序执行是在RAM里面,程序在加载到RAM过程中,要对RAM做一些处理,其中有两个最重要的函数分别是:
copy_data_section();//设定data段
clear_bss_section();//bss段全部清零

clear_bss_section代码如下:

void clear_bss_section(void)
{
int i;
unsigned long *dest = _START_bss;//bss段的起始地址

for(i = 0; i < (_SIZE_BSS/4);i++)
dest[i] = 0;
}

到现在为止,大家应该明白为什么没有初始化的全局变量会自动复制为零了吧!

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
五湖四海皆朋友
最近文章
浅谈MIPS的MMU(二)
2016-08-16 19:33:41
浅谈MIPS的MMU(一)
2016-05-05 10:55:06
推荐文章
最近访客