内存分区

物理内存

存在的存储设备。

虚拟内存

操作系统虚拟出来的内存,在运行程序的时候,操作系统会将虚拟内存进行分区。

  • 堆:动态申请内存的时候,在堆中开辟内存;
  • 栈:主要存放局部变量;
  • 静态全局区:未初始化的静态全局区(静态变量、全局变量、没有初始化的变量),初始化的静态全局区(静态变量、全局变量、赋过初始值的);
  • 代码区:存放程序代码;
  • 文字常量区:存放常量的;

普通的全局变量

在函数外部定义的变量。

int num=100;

作用范围:全局变量的范围是程序的所有地方。
用之前需要声明,声明方法 extern int num;
注意:声明的时候不要赋值,如果不赋初值,它的值是0。
生命周期:程序运行的整个过程,一直存在,直到程序结束。

静态全局变量

定义全局变量的时候添加 static关键字。

static int num=100;

作用范围:只能在它定义的.c文件中有效。
生命周期:程序运行的整个过程,一直存在,直到程序结束。
如果不赋初值,它的值是0。

普通局部变量

在函数内部定义的变量,或者符合语句中定义的变量。

void myFun(){
	int i = 10;
}

作用范围:在函数中定义的变量,在函数中有效;在复合语句中定义的变量,在复合语句中有效。
生命周期:在函数调用之前,局部变量不占用空间,调用函数的时候,才为局部变量开辟空间函数结束,局部变量就释放了。
如果不赋初值它的值是随机的。

静态局部变量

定义局部变量的时候添加static修饰。
作用范围:在函数中定义的变量,在函数中有效;在复合语句中定义的变量,在复合语句中有效。
生命周期:在函数调用之前,局部变量不占用空间,调用函数的时候,才为局部变量开辟空间函数结束后不释放,以后再调用函数的时候,也不在为其开辟空间,也不赋初值,使用之前的变量。
如果不赋初值,它的值是0

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐