关于未初始化全局变量

前几天发现未初始化全局变量一些特性,后来在一篇博客上发现有人说过这个问题

这是原博文地址 blog.csdn.net/liuqiaoyu080512/article/details/8455652

然后结合原博文,自己又做了几个实验

以下算是自己实验一遍以后的总结:

首先,自己曾经以为未初化的全局变量也要在程序(不是正在运行的进程)中占有空间,但是后来发现这是错的. 未初始化的全局变量获得相应大小的空间应该是在操作系统创建进程的时候分配(且是分配heap堆内的空间,不是DATA数据段), 和指针的初始化需要手动完成相比,这是自动的.(还有就是部分初始化和初始化的效果是一样的)


int kross[1024*1024]={0,1};
int main(){
 return 0;
}

这样编译完以后的结果:

我们发现test(编译完以后的out文件)的文件大小是包含部分初始化全局变量的


当我们不初始化时

int kross[1024*1024];
int main(){
 return 0;
}

结果是:

以上说明编译器在编译的时候会根据全局变量是否初始化而做出储存空间优化


2,未初始化全局变量的空间分配会自动完成

先运行test文件,然后ps -a找到test的pid,再根据pid查看进程的详细状态:

从图中可以发现VmData的大小是包含变量的大小的


相反当我们将变量改为指针时,这个时候VmData的大小就变小了,操作系统没有自动分配


还有就是原博文说初始化了的变量在创建进程时VmData的大小也不大,主要是由于操作系统不是将一个程序完全加载到内存

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值