标题:全局变量初始值是0怎么不算赋初值吗?
取消只看楼主
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
 问题点数:0 回复次数:1 
全局变量初始值是0怎么不算赋初值吗?
使用代码
int iGlobal  ;       // _BSS
int iGlobal1=0x0   ;     // 全局初始化区
int iGlobal2=0x2   ;

int main()
{
    printf("iGlobal=0x%x,0x%p\n",
        iGlobal,&iGlobal);  
    printf("iGlobal1=0x%x,0x%p\n",
        iGlobal1,&iGlobal1);
    printf("iGlobal2=0x%x,0x%p\n",
        iGlobal2,&iGlobal2);
    return 0;
} 做测试发现,变量iGlobal1存在了 bss段中,而不是存放在data段中,这是因为赋初值为 0 时被VC编译器优化了成未初始化变量 还是这个变量本身就应该被看出未初始化呢 ?

[[it] 本帖最后由 vfdff 于 2008-11-3 02:03 编辑 [/it]]

全局变量初始化.JPG (67.11 KB)
搜索更多相关主题的帖子: 初始化 全局变量 bss data 
2008-11-03 01:55
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
共享变量在赋初值为 0 的时候有不同的表现
使用代码:
#pragma data_seg(".shared")
int iGlobal0  ;       // _BSS
int iGlobal1=0x0   ;     // 全局初始化区
int iGlobal2=0x2   ;
#pragma data_seg()

int main()
{
   
    printf("iGlobal0=0x%x,0x%p\n",
        iGlobal0,&iGlobal0);  
    printf("iGlobal1=0x%x,0x%p\n",
        iGlobal1,&iGlobal1);
    printf("iGlobal2=0x%x,0x%p\n",
        iGlobal2,&iGlobal2);

    return 0;
}

测试,我们能看到,不像全局变量,共享变量 即使被赋成初值 0,它也算经过了赋值操作,将不再被存放在.bss段中

共享变量的初始化.JPG (64.65 KB)

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-11-03 02:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-242085-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093501 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved