关于C语言变量生存周期、作用域、内存分布、默认值的基本总结

在C语言中,参与计算的数据都是通过不同类型的常量或者变量来表示的,而使用变量时不得不注意变量的生存周期、作用域,内存区域和默认。在这里简单介绍一下内存区域:


代码段(code segment):通常是指用来存放程序执行的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常只读;

(heap):是用于存放进程运行中被动态内存分配的内存段,大小不固定,可扩张或收缩,一般由程序员分配释放;

(stack):又称堆栈,是用户存放程序临时创建的局部变量,由编译器自动分配和释放;

全局(静态)变量区:通常指用来存放程序中初始化(数据段)和未初始化的全局变量(BSS段);


了解了变量的内存区域后,笔者将变量、函数、动态内存的生存周期,内存区域进行对比,得到了下表:



全局变量:定义在函数外的变量,不是属于某一个函数,而是属于源程序文件。全局变量分为普通全局变量和静态全局变量。

1.普通(静态)全局变量

扫描二维码关注公众号,回复: 9651002 查看本文章

生命周期:程序运行时开始创建,程序结束退出销毁;

作用域:从定义到本文件结束都可以使用;

默认值:0;

内存区域:全局变量区;

这两者的区别:对于普通全局变量而言,链接属性为外部,也就是说,它不仅可以自己用,其他文件也可以用“extren”说明符调用。而静态全局变量是内部,只能在本文件中调用。


局部变量:函数内部声明的变量,仅在函数内部使用。也分为普通全局变量和静态全局变量。

1.普通局部变量

生命周期:进入函数时创建,函数退出时销毁;
作用域:本函数内部有效
默认值:随机值;

内存区域:栈;

2.静态局部变量

生命周期:第一次执行时创建,程序结束销毁;

作用域:从定义到程序结束;

默认值:0;

内存区域:全局变量区;

这二者只能在局部作用域可见,静态局部变量超过其作用域便不可被引用。


动态内存
生命周期:程序员调用申请动态内存函数创建,调用释放函数或程序结束自动销毁。
默认值:随机值
内存区域:堆;
普通(静态)函数
内存区域:代码段;
这二者差别:静态函数的链接属性为内部,普通函数的链接属性为外部。


参考文献1:函数、全局变量、局部变量和动态内存的特点归纳

参考文献2:C++ BSS段、数据段、代码段、堆与栈及五大内存分区

参考文献3:C语言变量生存周期

参考文献4:变量总结

发布了26 篇原创文章 · 获赞 16 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Teemo_king/article/details/78242578
今日推荐