C语言中变量分类和内存分区

烂漫一生 提交于 2020-01-13 06:07:11

变量的分类和内存分区

内存分区

到目前为止,我们知道学习了全局变量和局部变量
并且已经知道全局变量是在内存中的全局区,局部变量在内存中的栈区
内存是分区的,简单而言,内存分为三个区域:

  • 全局区:全局变量、代码机器码等放在此区域。全局区的大小由程序本身代码以及全局变量的大小决定。
  • 栈区: 存放参数、局部变量、返回地址等和函数有关的内容。
  • 堆区:除了全局区、栈区之外的空间,都算作对堆区。堆区域的内存,需要程序员手工管理(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++ 一直可以使用

静态局部变量,本质其实是被限制了作用域的全局变量
而静态全局变量,也是被限制了作用域的全局变量,只不过作用域被限制在本文件中,以下为各种变量的总结
在这里插入图片描述

通过以上表格的对比,我们可以知道,只有堆区的变量是比较特殊的,需要结合代码理解。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!