变量的分类和内存分区
内存分区
到目前为止,我们知道学习了全局变量和局部变量
并且已经知道全局变量是在内存中的全局区,局部变量在内存中的栈区
内存是分区的,简单而言,内存分为三个区域:
- 全局区:全局变量、代码机器码等放在此区域。全局区的大小由程序本身代码以及全局变量的大小决定。
- 栈区: 存放参数、局部变量、返回地址等和函数有关的内容。
- 堆区:除了全局区、栈区之外的空间,都算作对堆区。堆区域的内存,需要程序员手工管理(malloc和free)。
类比酒店
动态的实现租房和退房。
变量的分类
变量的分类设计变量的几个重要的属性:
-
变量所在的内存分区
不同的变量的内存分区是不一样的 -
变量的作用域
变量在什么范围内可以使用,一般分为:函数作用域、文件作用域、工程作用域 -
变量的生命周期:
一个变量在内存中被分配空间到空间被释放销毁的过程,被称为一个生命周期。
了解了之后来介绍变量的分类
###全局变量、局部变量、静态局部变量、静态全局变量
使用关键字static修饰局部变量,就得到了静态局部变量。
void FunTest()
{
static int s_nValue = 10;
s_nValue++;
}
int main(int argc, char* argv[])
{
FunTest();
FunTest();
FunTest();
return 0;
}
通过调试发现:
- static int s_nValue是被储存在全局区
- static int s_nValue= 10;只在第一次进入函数时被赋值,之后这句语句便不再重复作用了
- s_nValue++ 一直可以使用
静态局部变量,本质其实是被限制了作用域的全局变量
。
而静态全局变量,也是被限制了作用域的全局变量,只不过作用域被限制在本文件中,以下为各种变量的总结
通过以上表格的对比,我们可以知道,只有堆区的变量是比较特殊的,需要结合代码理解。
来源:CSDN
作者:weixin_44297979
链接:https://blog.csdn.net/weixin_44297979/article/details/103880344