全局变量、静态变量赋值为0时存储在bss段的测试

全局变量和静态变量一般存储在读写段,不赋值自然存储在bss段,但是如果赋值为0的话存储在bss段,而不是读写段。

测试程序:

#include <stdio.h>
int global_a0=0;
int global_a1=1;
int global_anull;

int main(){
        static int static_b0=0;
        static int static_b1=1;
        static int static_bnull;
        printf("global_a0:   %p\n",&global_a0);
        printf("global_a1:   %p\n",&global_a1);
        printf("global_anull:%p\n",&global_anull);

        printf("static_b0:   %p\n",&static_b0);
        printf("static_b1:   %p\n",&static_b1);
        printf("static_bnull:%p\n",&static_bnull);
        return 0;
}

内存形态如下:

这里我们不讨论堆栈,那是存储局部变量的地方,上面程序在64位机器编译的结果为:

根据内存地址我们可以了解到(由于地址只有后两位不一样,我只写后两位地址。

结论:由此可以知道,global_a0和static_b0都存在bss段。

size命令(unix系统)可以查看bss段大小信息

size 可执行文件 

例子:size a.out

可以看到bss段大小为24字节。数据段,text段同理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章