1.作用域

一个C语言变量的作用域可以是代码块作用域,函数作用域,文件作用域。

1.1.auto自动变量

一般情况下代码块内部定义的变量(局部变量)都是自动变量。

1.2.register寄存器变量

通常变量在内存中,如果能把变量放到CPU的寄存器里面,代码执行效率会更高。
register int i;

1.3.代码块作用域的静态变量

静态变量是指内存位置在执行期间一直不改变的变量,一个代码块内部的静态变量只能被这个代码块内部访问,且只初始化一次。

1.4 代码块作用域

1.5 全局变量

1.6 外部变量与extern函数

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。但是无法调用static修饰的静态变量/静态函数。
extern int i;

1.7 全局函数和静态函数

默认都是全局的,使用static关键字变为静态。

局部变量:在函数内部定义的变量
作用域:从定义到函数结束
生命周期:从定义到函数结束

全局变量:在函数外部定义的变量
作用域:项目中所有文件 注意:在其他文件中使用需要声明
生命周期:程序开始创建到程序结束销毁

全局变量可以和局部变量名字相同 使用时采用就进原则

静态局部变量:在函数内部定义的变量,使用static修饰
作用域:当前函数中
生命周期:程序开始创建到程序结束销毁

静态全局变量:在函数外部定义的变量,使用static修饰
作用域:当前文件中
生命周期:程序开始创建到程序结束销毁

全局变量、静态局部变量、静态全局变量如果未初始化 系统会默认初始化 值为0

静态局部变量、静态全局变量只会初始化一次 允许多次计算

全局函数:没有任何修饰的函数
作用域:项目中所有文件
生命周期:程序开始创建到程序结束销毁

静态函数:使用static修饰的函数
作用域:当前文件中
生命周期:程序开始创建到程序结束销毁

2.内存四区

2.1 代码区

代码区code,程序被操作系统加载到内存的时候,所有可执行代码都加载到代码区,也叫代码段,这块内存是不可以再运行期间修改的。

2.2 静态区/数据区

所有的全局变量以及程序中的静态变量都存储到静态区。

2.3 栈区

栈stack是一种先进后出的内存结构,所有的自动变量、函数的形参都是由编译器自动放入栈中,当一个自动变量超出其作用域时,自动从栈中弹出。C语言的函数参数都是以从右往左的顺序入栈的
对于自动变量,什么时候入栈,什么时候出栈是不需要程序控制的,由C语言编译器实现
栈不会很大,一般都是以K为单位

2.4 堆区

【C语言】——内存管理
【C语言】——内存管理
【C语言】——内存管理
【C语言】——内存管理

【C语言】——内存管理

笔记来源于黑马程序员

相关文章: