1.变量的储存方式分为静态储存和动态储存
(1)静态储存:
静态储存是指变量在定义的时候就被就被分配储存空间,直到整个程序结束。比如全局变量,静态局部变量。
(2)动态储存
变量的动态储存是指变量只有在使用的时候才会被分配储存空间,使用结束时又马上释放掉。比如函数的形参,动态的局部变量。
2.动态全局变量与静态全局变量的区别
(1)若程序是由一个源文件构成的,动态全局变量与静态全局变量没有。
(2)若程序是由多个源文件构成的,静态全局变量使得该变量成为定义该变量的源文件独享,即:静态全局变量对组成该程序的其他源文件是无效的,也就是其他文件不能通过extern的方式引用。
3.动态局局变量与静态局部变量的区别
局部变量本身是存本身是存放在栈中,只有在使用的时候才会被分配内存空间。但加上static后,就变成了静态局部变量。静态局部变量的特点:变量只会初始化一次。
4.内存区域
(1)代码段
(2)数据段(全局变量/静态变量)
(3)栈(局部变量 1M)
(4)堆(<=1.2G)
5.变量的分析
生命周期 | 作用域 | 内存区域 | 默认值 | 链接属性 | |
全局变量 | 程序运行时创建,结束后才销毁 | 从程序定义开始直到程序结束 | 数据段 | 0 | 外部 |
静态全局变量 | 程序运行时创建,结束后才销毁 | 从程序定义开始直到程序结束 | 数据段 | 0 | 内部 |
局部变量* | 进入函数时创建,函数结束时才销毁 | 本函数 | 栈 | 随机值 | —— |
静态局部变量 | 进入函数时创建,程序结束时才销毁 | 函数内部 | 数据段 | 0 | —— |
动态内存 | 动态申请创建,动态销毁时销毁 | 无 | 堆 | calloc为0,其他没有 | —— |
函数 | 无 | 无 | 代码段 | 无 | 外部 |
静态函数 | 无 | 无 | 代码段 | 无 | 内部 |